核心动画1

/*

 使用核心动画 需导入QuarzCore 框架(现在 不需要)

 #import <QuartzCore/QuartzCore.h>

 

 

 

 CALayer和UIView的关系:

 1、在UIView中有一个layer属性作为根图层,根图层没有隐式动画,根图层上可以放其他子图层,在UIview中所有能够看到的内容都包含在layer中

 2、CALayer负责视图中显示的内容和动画

 3、UIView负责监听和响应事件

 

 4、CALayer:包含在QuarzCore框架中,QuarzCore既可以用在iOS中又可以用在Mac OS X中

 

 -------------------------------------------------------------------------

 CALayer的存在意义:

 1、在iOS中CALayer的设计主要是为了内容展示和动画操作,CALayer本身并不包含在UIKit中,它不能响应事件

 2、由于CALayer在设计之初就考虑它的动画操作功能,CALayer很多属性在修改时都能形成动画效果,这种属性被称为“隐式动画属性”

 

 -------------------------------------------------------------------------

CALayer的常用属性:

 定义一个图层的位置:

 anchorPoint:锚点、定位点  锚点的描述是相对于 *自己 *x、y位置比例而言的 默认在图像中心点(0.5,0.5)的位置  决定图层在那一个点  显示在中心的位置  是(是否支持隐式动画)

 backgroundColor 图层背景颜色 是(是否支持隐式动画)

 borderColor 边框颜色 是(是否支持隐式动画)

 borderWidth 边框宽度 是(是否支持隐式动画)

 bounds 图层大小 是(是否支持隐式动画)

 contents 图层显示内容,例如可以将图片作为图层内容显示 是(是否支持隐式动画)

 contentsRect 图层显示内容的大小和位置 是(是否支持隐式动画)

 cornerRadius 圆角半径 是(是否支持隐式动画)

 doubleSided 图层背面是否显示,默认为YES 否(是否支持隐式动画)

 frame 图层大小和位置,不支持隐式动画,所以CALayer中很少使用frame,通常使用bounds和position代替 否(是否支持隐式动画)

 hidden 是否隐藏 是(是否支持隐式动画)

 mask 图层蒙版 是(是否支持隐式动画)

 maskToBounds 子图层是否剪切图层边界,默认为NO 是(是否支持隐式动画)

 opacity 透明度 ,类似于UIView的alpha 是(是否支持隐式动画)

 position 决定图层在父视图的位置 图层位于 *父视图* 中心点位置,类似于UIView的center 是(是否支持隐式动画)

 shadowColor 阴影颜色 是(是否支持隐式动画)

 shadowOffset 阴影偏移量 是(是否支持隐式动画)

 shadowOpacity 阴影透明度,注意默认为0,如果设置阴影必须设置此属性 是(是否支持隐式动画)

 shadowPath 阴影的形状 是(是否支持隐式动画)

 shadowRadius 阴影模糊半径 是(是否支持隐式动画)

 sublayers 子图层 是

 sublayerTransform 子图层形变 是(是否支持隐式动画)

 transform 图层形变

 

 -------------------------------------------------------------------------

注意:1、图层上不能添加手势

     2、以上支持隐式动画的属性 本质是这些属性的变动默认隐含了CABasicAnimation动画实现

 */

 

 

#import "ViewController.h"

#import <QuartzCore/QuartzCore.h>

 

@interface ViewController ()

{

    CALayer *myLayer;

}

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

 

//    [self test1];

    [self layerTest];

    self.view.backgroundColor = [UIColor colorWithRed:0.074 green:0.854 blue:0.988 alpha:1.000];

}

 

- (void)test1 {

    //    CALayer和UIView的关系:

    //    在UIView中有一个layer属性作为根图层,根图层上可以放其他子图层,在UIView中所有能够看到的内容都包含在layer中

    //    CALayer负责视图中显示的内容和动画

    //    UIView负责监听和响应事件

    

    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    view.backgroundColor = [UIColor redColor];

    

    [self.view addSubview:view];

    

    //    图层上不可以添加监听和响应事件

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(testResponse:)];

    [view addGestureRecognizer:tap];

}

 

- (void)testResponse:(UITapGestureRecognizer *)sender {

    sender.view.layer.cornerRadius = sender.view.layer.cornerRadius == 0 ? 50 : 0;

}

 

#pragma mark - CALayer 初体验

- (void)layerTest {

    myLayer = [[CALayer alloc] init];

    myLayer.bounds = CGRectMake(0, 0, 200, 200);

//    设置中心点

    myLayer.position = self.view.center;

    myLayer.backgroundColor = [UIColor orangeColor].CGColor;

    myLayer.cornerRadius = 100;

    myLayer.borderWidth = 2;

    myLayer.borderColor = [UIColor whiteColor].CGColor;

    myLayer.shadowColor = [UIColor yellowColor].CGColor;

    myLayer.shadowOffset = CGSizeMake(-1, -5);

//    设置阴影颜色必须先设置 shadowOpacity(阴影颜色的透明度 默认是0 完全透明)

    myLayer.shadowOpacity = 1.0;

//    子图层是添加到 根图层上的

    [self.view.layer addSublayer:myLayer];

    

    myLayer.delegate = self;

}

 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

 

    myLayer.bounds = CGRectMake(0, 0, 300, 300);

    myLayer.backgroundColor = [UIColor greenColor].CGColor;

    myLayer.cornerRadius = 150;

 

}

 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];

    myLayer.position = [touch locationInView:self.view];

    

//    得到layer的宽度

    CGFloat width = CGRectGetWidth(myLayer.bounds);

    width = width == 300 ? 200:300;

    myLayer.bounds = CGRectMake(0, 0, width, width);

    myLayer.cornerRadius = width/2;

    myLayer.backgroundColor = myLayer.backgroundColor == [UIColor orangeColor].CGColor ? [UIColor greenColor].CGColor : [UIColor orangeColor].CGColor;

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

 

时间: 2024-12-17 03:12:44

核心动画1的相关文章

核心动画

在ViewController.m中. @interface ViewController ()@property(nonatomic, strong) UIView * MyView;@end @implementation ViewController - (void)viewDidLoad {    [super viewDidLoad];            self.MyView = [[UIView alloc] initWithFrame:CGRectMake(100, 100,

CoreAnimation编程指南(一)核心动画基础

什么是核心动画 核心动画是一个图形渲染和动画基础设施可在iOS和OS X,你使用的动画的看法和你的应用程序的其他视觉元素.核心动画,大部分的工作需要画出每一帧的动画是为你做的.所有您需要做的就是配置一些动画参数(如起点和终点)告诉核心动画开始.核心动画不休息,把最实际的绘图工作了板载图形硬件加速渲染.这种自动图形加速的结果在高帧速率和流畅的动画,而不增加CPU和减慢你的应用. 如果你正在写的iOS应用程序,您使用的是核心动画无论你是否知道.如果你正在写的OS X应用程序,你可以利用非常小的努力核

IOS-CoreAnimation(核心动画)

一.核心动画 1.Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h> 2.开发步骤: ①初始化一个动画对象(CAAnimation)并设置一些动画相关属性 ②添加动画对象到层(CALayer)中,开始执行动画 3.CALayer中很多属性都可以通过CAAnimation实现动画效果,包括:opacity.posi

iOS核心动画Core Animation(二)

一. 使用核心动画实现动画效果的步骤 ■1. 创建动画对象 ■2. 设置动画属性 ■3. 把动画对象添加到某个 CALayer 对象上 ■4. 需要停止动画:可以调用 remove 方法移除动画 具体步骤 1.使用它需要先添加QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h> 2.初始化一个CAAnimation对象,并设置一些动画相关属性 3.通过调用CALayer的addAnimation:forKey:方法增加CAAnimatio

iOS核心动画Core Animation(一)

核心动画Core Animation(一) 一.简述 Core Animation是直接作用在CALayer上的(并非UIView上)非常强大的跨Mac OS X和iOS平台的动画处理API,Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程. 二.核心动画常识 列举处核心动画的一些常识知识. 核心动画的本质:在后台移动图层中的内容,  执行完毕后图层本身的位置并没有发生变化. 如果是Xcode6之前的版本,要导入<QuartzCore/QuartzCore.h>框架,

核心动画 (CAAnimationGroup)

Main.storyboard ViewController.m // //  ViewController.m //  8A05.核心动画 CAAnimationGroup // //  Created by huan on 16/2/5. //  Copyright © 2016年 huanxi. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (we

图层的核心动画(CABaseAnimation)续

Main.storyboard ViewController.m // //  ViewController.m //  8A01.核心动画 // //  Created by huan on 16/2/4. //  Copyright © 2016年 huanxi. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IB

核心动画(CAKeyframeAnimation)

Main.storyboard ViewController.m // //  ViewController.m //  8A02.核心动画 - CAKeyframeAnimation // //  Created by huan on 16/2/4. //  Copyright © 2016年 huanxi. All rights reserved. // #import "ViewController.h" @interface ViewController () @propert

iOS:核心动画之动画组CAAnimationGroup

CAAnimationGroup——动画组 动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行 属性说明: –animations:用来保存一组动画对象的NSArray 默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间 具体的实例如下: 实现功能:在创建的动画组中存入两个基本动画,一个是沿着Z轴旋转360度的动画,另一个是放大2倍的动画,这两个动画并

iOS:核心动画之关键帧动画CAKeyframeAnimation

CAKeyframeAnimation——关键帧动画 关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是: –CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 – 属性说明: –values:上述的NSArray对象.里面的元素称为“关键帧”(keyframe).动画对象会在指定的时间(duration)内,依次显