`
iaiai
  • 浏览: 2196183 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iOS开发UI篇—核心动画(基础动画)

 
阅读更多
一、简单介绍

CAPropertyAnimation的子类

属性解析:
  • fromValue:keyPath相应属性的初始值
  • toValue:keyPath相应属性的结束值


随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue

如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。

比如,CALayer的position初始值为(0,0),CABasicAnimation的fromValue为(10,10),toValue为(100,100),虽然动画执行完毕后图层保持在(100,100)这个位置,实质上图层的position还是为(0,0)


二、平移动画

代码示例:
//
//  YYViewController.m
//  07-核心动画(基础动画)
//
//  Created by apple on 14-6-21.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()
@property(nonatomic,strong)CALayer *myLayer;
@end

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //创建layer
    CALayer *myLayer=[CALayer layer];
    //设置layer的属性
    myLayer.bounds=CGRectMake(0, 0, 50, 80);
    myLayer.backgroundColor=[UIColor yellowColor].CGColor;
    myLayer.position=CGPointMake(50, 50);
    myLayer.anchorPoint=CGPointMake(0, 0);
    myLayer.cornerRadius=20;
    //添加layer
    [self.view.layer addSublayer:myLayer];
    self.myLayer=myLayer;
}

//设置动画(基础动画)
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //1.创建核心动画
    //    CABasicAnimation *anima=[CABasicAnimation animationWithKeyPath:<#(NSString *)#>]
    CABasicAnimation *anima=[CABasicAnimation animation];
    
    //1.1告诉系统要执行什么样的动画
    anima.keyPath=@"position";
    //设置通过动画,将layer从哪儿移动到哪儿
    anima.fromValue=[NSValue valueWithCGPoint:CGPointMake(0, 0)];
    anima.toValue=[NSValue valueWithCGPoint:CGPointMake(200, 300)];
    
    //1.2设置动画执行完毕之后不删除动画
    anima.removedOnCompletion=NO;
    //1.3设置保存动画的最新状态
    anima.fillMode=kCAFillModeForwards;

    //2.添加核心动画到layer
    [self.myLayer addAnimation:anima forKey:nil];

}
  @end


代码说明:

第42行设置的keyPath是@"position",说明要修改的是CALayer的position属性,也就是会执行平移动画

第44,45行,这里的属性接收的时id类型的参数,因此并不能直接使用CGPoint这种结构体类型,而是要先包装成NSValue对象后再使用。

默认情况下,动画执行完毕后,动画会自动从CALayer上移除,CALayer又会回到原来的状态。为了保持动画执行后的状态,可以加入第48,50行代码

byValue和toValue的区别,前者是在当前的位置上增加多少,后者是到指定的位置。


执行效果:



设置代理:设置动画的代理,可以监听动画的执行过程,这里设置控制器为代理。

代码示例:
#import "YYViewController.h"

@interface YYViewController ()
@property(nonatomic,strong)CALayer *myLayer;
@end

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //创建layer
    CALayer *myLayer=[CALayer layer];
    //设置layer的属性
    myLayer.bounds=CGRectMake(0, 0, 50, 80);
    myLayer.backgroundColor=[UIColor yellowColor].CGColor;
    myLayer.position=CGPointMake(50, 50);
    myLayer.anchorPoint=CGPointMake(0, 0);
    myLayer.cornerRadius=20;
    //添加layer
    [self.view.layer addSublayer:myLayer];
    self.myLayer=myLayer;
}

//设置动画(基础动画)
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //1.创建核心动画
    //    CABasicAnimation *anima=[CABasicAnimation animationWithKeyPath:<#(NSString *)#>]
    CABasicAnimation *anima=[CABasicAnimation animation];
    
    //1.1告诉系统要执行什么样的动画
    anima.keyPath=@"position";
    //设置通过动画,将layer从哪儿移动到哪儿
    anima.fromValue=[NSValue valueWithCGPoint:CGPointMake(0, 0)];
    anima.toValue=[NSValue valueWithCGPoint:CGPointMake(200, 300)];
    
    //1.2设置动画执行完毕之后不删除动画
    anima.removedOnCompletion=NO;
    //1.3设置保存动画的最新状态
    anima.fillMode=kCAFillModeForwards;
    anima.delegate=self;
    //打印
    NSString *str=NSStringFromCGPoint(self.myLayer.position);
    NSLog(@"执行前:%@",str);
    
    //2.添加核心动画到layer
    [self.myLayer addAnimation:anima forKey:nil];

}

-(void)animationDidStart:(CAAnimation *)anim
{
    NSLog(@"开始执行动画");
}

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    //动画执行完毕,打印执行完毕后的position值
    NSString *str=NSStringFromCGPoint(self.myLayer.position);
    NSLog(@"执行后:%@",str);
}

@end

打印position的属性值,验证图层的属性值还是动画执行前的初始值{50,50},并没有真正被改变为{200,300}。


三、缩放动画

实现缩放动画的代码示例:
//
//  YYViewController.m
//  08-核心动画平移
//
//  Created by apple on 14-6-21.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()
@property(nonatomic,strong)CALayer *myLayer;
@end

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //创建layer
    CALayer *myLayer=[CALayer layer];
    //设置layer的属性
    myLayer.bounds=CGRectMake(0, 0, 150, 60);
    myLayer.backgroundColor=[UIColor yellowColor].CGColor;
    myLayer.position=CGPointMake(50, 50);
    myLayer.anchorPoint=CGPointMake(0, 0);
    myLayer.cornerRadius=40;
    //添加layer
    [self.view.layer addSublayer:myLayer];
    self.myLayer=myLayer;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //1.创建动画
    CABasicAnimation *anima=[CABasicAnimation animationWithKeyPath:@"bounds"];
    //1.1设置动画执行时间
    anima.duration=2.0;
    //1.2设置动画执行完毕后不删除动画
    anima.removedOnCompletion=NO;
    //1.3设置保存动画的最新状态
    anima.fillMode=kCAFillModeForwards;
    //1.4修改属性,执行动画
    anima.toValue=[NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];
    //2.添加动画到layer
    [self.myLayer addAnimation:anima forKey:nil];
}

@end


实现效果:


四、旋转动画

代码示例:
//
//  YYViewController.m
//  09-核心动画旋转
//
//  Created by apple on 14-6-21.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()
@property(nonatomic,strong)CALayer *myLayer;
@end

@implementation YYViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //创建layer
    CALayer *myLayer=[CALayer layer];
    //设置layer的属性
    myLayer.bounds=CGRectMake(0, 0, 150, 60);
    myLayer.backgroundColor=[UIColor yellowColor].CGColor;
    myLayer.position=CGPointMake(50, 50);
    myLayer.anchorPoint=CGPointMake(0, 0);
    myLayer.cornerRadius=40;
    //添加layer
    [self.view.layer addSublayer:myLayer];
    self.myLayer=myLayer;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //1.创建动画
    CABasicAnimation *anima=[CABasicAnimation animationWithKeyPath:@"transform"];
    //1.1设置动画执行时间
    anima.duration=2.0;
    //1.2修改属性,执行动画
    anima.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2+M_PI_4, 1, 1, 0)];
    //1.3设置动画执行完毕后不删除动画
    anima.removedOnCompletion=NO;
    //1.4设置保存动画的最新状态
    anima.fillMode=kCAFillModeForwards;
    
    //2.添加动画到layer
    [self.myLayer addAnimation:anima forKey:nil];
}
@end

实现效果:


提示:如果要让图形以2D的方式旋转,只需要把CATransform3DMakeRotation在z方向上的值改为1即可。

anima.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2+M_PI_4, 1, 1, 0)];

四、补充

可以通过transform(KVC)的方式来进行设置。

代码示例(平移):
#import "YYViewController.h"

@interface YYViewController ()
@property(nonatomic,strong)CALayer *myLayer;
@end

@implementation YYViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //创建layer
    CALayer *myLayer=[CALayer layer];
    //设置layer的属性
    myLayer.bounds=CGRectMake(0, 0, 150, 60);
    myLayer.backgroundColor=[UIColor yellowColor].CGColor;
    myLayer.position=CGPointMake(50, 50);
    myLayer.anchorPoint=CGPointMake(0, 0);
    myLayer.cornerRadius=40;
    //添加layer
    [self.view.layer addSublayer:myLayer];
    self.myLayer=myLayer;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //1.创建动画
    CABasicAnimation *anima=[CABasicAnimation animation];
    anima.keyPath=@"transform";
    //1.1设置动画执行时间
    anima.duration=2.0;
    //1.2修改属性,执行动画
  
    anima.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(0, 100, 1)];
    //1.3设置动画执行完毕后不删除动画
    anima.removedOnCompletion=NO;
    //1.4设置保存动画的最新状态
    anima.fillMode=kCAFillModeForwards;
    
    //2.添加动画到layer
    [self.myLayer addAnimation:anima forKey:nil];
}

实现效果:

绘制的图形在y的方向上移动100个单位。

  • 大小: 22.2 KB
  • 大小: 22 KB
  • 大小: 22.5 KB
  • 大小: 23.2 KB
  • 大小: 22.7 KB
  • 大小: 23.6 KB
  • 大小: 22.6 KB
  • 大小: 22.5 KB
分享到:
评论

相关推荐

    iOS开发 - 第02篇 - UI进阶 - 13 - 核心动画

    在iOS开发中,UI设计和交互是至关重要的部分,而核心动画(Core Animation)则是实现这些高级视觉效果的关键技术。本文将深入探讨如何利用核心动画来创建动态、丰富的用户界面,以实现时钟和幸运转盘这样的功能。 ...

    仿IOSUI动画

    最后,"仿iOSUI动画"项目中的源代码和资源文件可以帮助开发者更好地理解和实现这些效果。通过分析和学习提供的文件,可以了解到如何将这些动画集成到自己的项目中,并根据需求进行调整和优化。同时,这也有助于提升...

    iOS系统UI风格片头动画ppt模板.rar

    在iOS系统中,UI(User Interface)设计是用户体验的核心部分,它强调简洁、直观和美观。iOS系统的UI风格以其独特的设计原则和规范,为用户提供了高效且愉悦的交互体验。"iOS系统UI风格片头动画ppt模板"是设计者为了...

    IOS之UI风格片头动画PPT模板.pptx

    IOS之UI风格片头动画PPT模板.pptx

    ios 核心动画

    核心动画是苹果公司为其iOS操作系统提供的一套强大的动画技术框架,它允许开发者利用2D和3D视觉效果增强...随着iOS应用开发的不断演进,核心动画框架也在不断更新和完善,为开发者提供更多的可能性和创造力的发挥空间。

    iOS开发 汤姆猫 UI基础

    在iOS开发领域,UI设计是构建用户界面的关键环节,它直接影响到应用的...以上就是围绕"iOS开发 汤姆猫 UI基础"这个主题所涉及的主要知识点,通过这些技术,开发者可以构建出一个生动、有趣且用户体验良好的汤姆猫应用。

    iOS核心动画高级技巧以及源码

    在iOS开发中,Core Animation是实现丰富视觉效果和流畅动态体验的关键框架。它不仅提供了基本的动画功能,还允许开发者深入定制和优化动画效果。本教程深入探讨iOS核心动画的高级技巧,通过实例代码帮助开发者从初级...

    iOS-自定义转场动画

    首先,转场动画是iOS系统中UI设计的重要组成部分,它涉及到UIViewController的生命周期和UINavigationController的管理。在标准的iOS应用中,页面间的跳转通常由系统自动处理,但这些默认动画可能无法满足所有设计...

    iOS开发进阶篇-成为一个iOS开发高手

    "iOS开发进阶篇-成为一个iOS开发高手"这份资料正为此目标提供了全面的指导。它深入探讨了iOS开发的核心概念和技术,旨在帮助开发者们从初级水平提升到高级专家水平。 首先,这份资料可能涵盖了Swift编程语言的高级...

    iOS 根据声波 曲线动画

    在iOS开发中,创建引人入胜的用户体验是至关重要的,而“iOS根据声波曲线动画”就是一个很好的示例,它结合了音频处理与动画效果,使得应用更加生动有趣。这个项目利用声波分贝峰值数据,通过贝塞尔曲线来绘制动画,...

    ios开发 简单demo(包含动画、时钟、计算器和常用UI界面)

    这个"ios开发 简单demo"包含了几个关键的学习点:动画、时钟、计算器以及常用UI界面。这些元素是构建iOS应用程序的基础,让我们逐一深入探讨。 1. **动画**:在iOS开发中,动画是提升用户体验的重要手段。UIKit框架...

    ios-iOS直播点赞动画,iOS直播心型点赞动画.zip

    在iOS开发中,实现动态效果,尤其是直播场景中的点赞动画,是提升用户体验的重要一环。本项目以"ios-iOS直播点赞动画,iOS直播心型点赞动画.zip"为标题,显然是一个使用Swift语言编写的iOS应用示例,专门用于创建心形...

    iOS开发 - 第02篇 - UI进阶 - 14 - 彩票(第一天)

    在这个“iOS开发 - 第02篇 - UI进阶 - 14 - 彩票(第一天)”的主题中,我们将探讨如何创建一个彩票应用的用户界面,这涉及到一系列与iOS界面设计和技术相关的知识点。 首先,彩票应用通常涉及到动态更新的数字展示,...

    iOS开发进阶篇-成为iOS开发高手-源码

    这个源码包“iOS开发进阶篇-成为iOS开发高手”提供了丰富的学习材料,旨在帮助你深入理解iOS开发的核心概念和技术。以下将对这个资源包中的关键知识点进行详细阐述: 1. **Objective-C与Swift的比较**: - ...

    ios及ui基础

    在iOS开发领域,掌握基础知识是至关重要的,尤其是Objective-C(OC)语法、用户界面(UI)设计以及网络编程。这些知识点构成了"ios及ui基础"的主题,是每个iOS开发者必须熟练掌握的基础技能。 首先,Objective-C是...

    无线互联ios_UI_基础部分ppt

    **无线互联ios UI 基础部分PPT**是一份详尽介绍iOS应用程序用户界面(UI)开发的教程资料,包含六章内容丰富的PPT,旨在帮助开发者掌握iOS平台上的UI设计与实现。以下是每章内容的概览: **第一章:iPhone开发入门*...

    ios开发,一个扑克牌翻开的动画效果.zip

    苹果提供了Core Animation框架,它是iOS系统中用于创建2D图形和动画的核心组件。通过Core Animation,开发者可以轻松地创建复杂的视图动画,包括平移、旋转、缩放等效果。 要实现扑克牌翻转效果,我们首先需要创建...

    SwiftUI iOS 开发入门教学.zip

    这个“SwiftUI iOS 开发入门教学”压缩包文件显然是为初学者设计的,提供了学习SwiftUI的基本资源。让我们深入探讨SwiftUI的核心概念、优势以及如何开始你的SwiftUI开发之旅。 首先,SwiftUI的出现简化了UI编程,...

    实例讲解iOS应用UI开发之基础动画的创建

    在iOS应用UI开发中,创建基础动画是提升用户体验的关键元素之一。本文将通过实例深入讲解如何使用Core Animation框架中的CAPropertyAnimation子类,特别是CABasicAnimation,来实现平移动画。 首先,...

    iOS动画--基础动画

    本篇文章将深入探讨iOS基础动画的概念、原理及其在实际开发中的应用,旨在为iOS开发者提供一份详实的学习指南。 #### 一、Core Animation概述 Core Animation是Apple为Mac OS X和iOS提供的一个强大的图形渲染引擎...

Global site tag (gtag.js) - Google Analytics