创建简单动画(一) --- 常规hud

先说下当前我为处理动画的思路: (新手上路, 老司机轻喷,如果有更好的实现方法请大神指教 感恩戴德)

#1. 分析动画构成

#2. 如果是位移动画则考虑使用BasicAnimation或者KeyframeAnimation实现, 需要的话再搭配缓动函数

#3. 比较复杂的动画则考虑是否用UIBezierpath一帧帧来画

今天我们模仿做一个场景切换加载等待动画, 比如这样的

我们分析下这张图的构成

#1. 一个灰色的背景

#2. 一个白色的圆环

#3. 一个闭合的圆弧(白色部分)

看起来不是简单的位移动画了, 我们用UIBezierPath加CADisplayLink一帧一帧来画试试看

灰色的背景,

这个比较简单, 我们直接创建一个UIView子类, 背景颜色设置为灰色

白色的圆环,

可以用UIBezierPath直接画一个圆,注意调整线的宽度 So easy

    //添加外圆
    UIBezierPath *apath = [UIBezierPath bezierPath];
    apath.lineWidth = 5;
    [apath addArcWithCenter:CGPointMake(50, 50) radius:40 startAngle:0 endAngle:2 * M_PI clockwise:YES];

    [apath stroke];

闭合的圆弧,

一样用UIBezierPath, 先设置圆心 画一个圆弧然后闭合路径, _count是设置的一个变量, 有Controller中的计时器控制以达到动画的效果

//先画内圆

    //设置线条
    path.lineWidth     = 5;
    path.lineCapStyle  = kCGLineCapRound;
    path.lineJoinStyle = kCGLineJoinRound;

    //设置圆心
    [path moveToPoint:CGPointMake(_myWidth / 2, _myHeight / 2)];

    //设置内切圆弧
    [path addArcWithCenter:CGPointMake(_myWidth / 2, _myHeight / 2) radius:38 startAngle: M_PI * 3 / 2 endAngle:M_PI * 3 / 2 + 2 * M_PI / 300 * _count clockwise:YES];

    //线路闭合
    [path closePath];

    [path fill];

要注意调整外圆和内闭合弧的线宽

然后在Controller中创建计时器, 改变_count的值达到动画的效果

上代码:

先创建一个UIView子类,

#import <UIKit/UIKit.h>

@interface MyView : UIView

@property (nonatomic, assign) CGFloat   myWidth;
@property (nonatomic, assign) CGFloat   myHeight;
@property (nonatomic, assign) NSInteger count;

@end

在drawRect中添加图案

#import "MyView.h"

@implementation MyView

- (id)initWithFrame:(CGRect)frame {

    CGRect myFrame = CGRectMake(frame.origin.x, 0, frame.size.width, frame.size.height);

    self = [super initWithFrame:myFrame];
    if (self) {

        self.myWidth  = frame.size.width;
        self.myHeight = frame.size.height;

    }

    return self;
}

- (void)drawRect:(CGRect)rect {
    // Drawing code

    //设置线条颜色
    UIColor *color = [UIColor whiteColor];
    [color set];

    //画内圆
    UIBezierPath *path = [UIBezierPath bezierPath];

    //设置线条
    path.lineWidth     = 5;
    path.lineCapStyle  = kCGLineCapRound;
    path.lineJoinStyle = kCGLineJoinRound;

    //设置圆心
    [path moveToPoint:CGPointMake(_myWidth / 2, _myHeight / 2)];

    //设置内切圆弧
    [path addArcWithCenter:CGPointMake(_myWidth / 2, _myHeight / 2)
                    radius:38 startAngle: M_PI * 3 / 2
                  endAngle:M_PI * 3 / 2 + 2 * M_PI / 300 * _count
                 clockwise:YES];

    //线路闭合
    [path closePath];

    [path fill];

    //添加外圆
    UIBezierPath *apath = [UIBezierPath bezierPath];
    apath.lineWidth = 5;
    [apath addArcWithCenter:CGPointMake(50, 50)
                     radius:40
                 startAngle:0
                   endAngle:2 * M_PI
                  clockwise:YES];

    [apath stroke];

}

@end

在Controller中调用

#import "ViewController.h"
#import "MyView.h"

@interface ViewController ()

@property (nonatomic, strong) MyView        *myView;
@property (nonatomic, strong) CADisplayLink *displayLink;
@property (nonatomic, assign) NSInteger      count;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    //创建计时器
    _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(countOn)];
    _displayLink.paused = YES;

    [_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];

    //创建自定义View实例
    _myView = [[MyView alloc] initWithFrame:CGRectMake(150, 0, 100, 100)];
    _myView.backgroundColor = [UIColor grayColor];
    _myView.count = 1;
    [self.view addSubview:_myView];

    //在这里可以添加额外动画, 设置hud出现的方式
    [UIView animateWithDuration:0.5 animations:^{

        _myView.frame = CGRectMake(150, 150, 100, 100);
        _displayLink.paused = NO;
    }];

}

//计时器事件, 修改动画参数
- (void)countOn {

    _count++;
    _myView.count = _count;

    if (_count > 290) {

        [_displayLink invalidate];
        [_myView removeFromSuperview];
    }

    //重绘
    [_myView setNeedsDisplay];
}
时间: 2024-10-24 03:26:03

创建简单动画(一) --- 常规hud的相关文章

用PHP动态创建Flash动画

Macromedia 公司出品的 Flash(Flash培训 ) 动画软件现已经成为Web页面上非常流行的表现工具,网站开发者利用它引起浏览者的兴趣.然而不幸的是,仅仅使用ActionScript创建动画受到很大的限制,Macromedia已经宣布,打算放弃Flash Generator产品,转而采用支持Flash MX的Cold Fusion,我们的网站将向何处去呢?现在,我们可以利用Ming PHP(PHP培训 php教程 )库来轻松地动态创建Flash动画,并且和我们的代码无缝集成.我们可

CocoStudio 创建简单UI资源并添加到工程

打开CocoStudio UI编辑器新项目,设置画布480*320, 添加一个标签和一个按钮控件 导出项目,生成所需要的资源文件, 复制到cocos2d工程Resources目录下 加入代码: 头文件: #include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_NS_CC_EXT; using namespace ui; 加载cocostudio资源创建控件 _touchgroup = TouchG

ios状态栏调整 简单动画的知识点

首先状态栏式view的属性,所以在viewController中直接重写: /** 修改状态栏 */ - (UIStatusBarStyle)preferredStatusBarStyle { // 修改状态栏的颜色(白色) return UIStatusBarStyleLightContent; } // 这种返回值没有*的说明不是对象,那么不是枚举就是结构体,大多数情况是枚举,所以取值也比较简单,一般是返回值后边加上状态: 在UIKit学习中常用的块动画: // 块动画 animateWit

IOS 创建简单表视图

创建简单表视图 此实例主要实现UITableViewDataSource协议中必须要实现的两个方法tableView:numberOfRowsInSection: 和tableView:cellForRowAtIndexPath: 当表视图显示的时候会发出tableView:numberOfRowsInSection:消息询问当前节中的行数. 当表视图单元格显示的时候会发出tableView:cellForRowAtIndexPath:消息为单元格提供显示数据. 一.实现的时序图,如下: 二.示

CocoStudio 创建简单UI资源并加入?到project

打开CocoStudio UI编辑器新项目,设置画布480*320, 加入?一个标签和一个button控件 导出项目,生成所须要的资源文件, 拷贝到cocos2dprojectResources文件夹下 添?代码: 头文件: #include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_NS_CC_EXT; using namespace ui; 载入cocostudio资源创建控件 _touchgro

使用Visual Studio创建简单的自定义Web Part 部件属性

使用Visual Studio创建简单的自定义Web Part 部件属性 自定义属性使用额外的选项和设置拓展你的Web part部件.本文主要讲解如何使用Visual Studio创建简单的自定义Web Part 部件属性. 1. 打开Visual Studio,点击文件--新建项目--空白SharePoint项目CustomWPProperties.部署为场解决方案. 2. 右击项目添加新项Web Part部件WPPropertyExample,点击添加. 3. 右击WPPropertyExa

图文介绍MyEclipse (2015) 中创建简单的Maven项目的步骤(用于生成可运行jar文件)

利用MyEclipse的引导,能够非常方便的创建简单的.用于生成可运行jar文件的Maven项目: (原创文章,转载请注明转自Clement-Xu的博客:http://blog.csdn.net/clementad/article/details/46954277) 1.New -> Project... 选择 Maven Project, 点击Next > 2.在Select projrect name and location界面,各选项例如以下图,点击Next > 3.在Selec

关于DOM的简单动画

利用DOM制作的一些简单动画 1.div每点击一次 向右移动200px(带DOM动画过渡) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> h1 { font-size: 20px; } #testDiv { width: 150px; height

jquery添加光棒效果的各种方式以及简单动画复杂动画

过滤器.绑定事件.动画 一.基本过滤器 语法 描述 返回值 :first 选取第一个元素 单个元素 :last 选取最后一个元素 单个元素 :not(selector) 选取去除所有与给定选择器匹配的元素 集合元素 :even 选取索引是偶数的所有元素(index 从0开始) 集合元素 :odd 选取索引是奇数的所有元素(index 从0开始) 单个元素 :eq(index) 选取索引等于index的元素 集合元素 :gt 选取索引大于index的元素 集合元素 :lt 选取索引小于index的