iOS之CoreAnimation(基礎動畫)筆記

  • 首先我們有必要先了解下CALayer對象。CALayer包含在QuartzCore框架中,這是一個跨平臺的框架,既可以用在iOS中又可以用在Mac OS X中。在使用Core Animation開發動畫的本質就是將CALayer中的內容轉化為位圖從而供硬件操作。


    Snip20160819_1.png
  • CALayer常用屬性

在iOS中CALayer的設計主要是了為了內容展示和動畫操作,CALayer本身并不包含在UIKit中,它不能響應事件。由于CALayer在設計之初就考慮它的動畫操作功能,CALayer很多屬性在修改時都能形成動畫效果,這種屬性稱為“隱式動畫屬性”。但是對于UIView的根圖層而言屬性的修改并不形成動畫效果,因為很多情況下根圖層更多的充當容器的做用,如果它的屬性變動形成動畫效果會直接影響子圖層。另外,UIView的根圖層創建工作完全由iOS負責完成,無法重新創建,但是可以往根圖層中添加子圖層或移除子圖層

Snip20160819_3.png

以上這些都是支持“隱式動畫”

- (void)viewDidLoad {

    [super viewDidLoad];
    //實例化自定義圖層
    self.myLayer = [CALayer layer];
    //設置大小
    [self.myLayer setBounds:CGRectMake(100, 100, 100, 100)];
    //設置背景顏色
    [self.myLayer setBackgroundColor:[UIColor redColor].CGColor];
    // 中心點 Position 相當于View.center
    [self.myLayer setPosition:CGPointMake(100, 100)];
    
    self.myLayer.shadowColor = [UIColor  orangeColor].CGColor;
    
    self.myLayer.shadowOffset = CGSizeMake(10, 10);
    
    [self.view.layer addSublayer:self.myLayer];
}

#warning - CALayer 屬性不能響應事件

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    
    UITouch *touch = touches.anyObject;
    
    CGPoint location = [touch locationInView:self.view];

    //位置
    [self.myLayer setPosition:location];

    //尺寸
    NSInteger size = arc4random_uniform(50) + 51;
    
    [self.myLayer setBounds:CGRectMake(0, 0, size, size)];
    //圓角
    NSInteger rotation = arc4random_uniform(30);
    
    [self.myLayer setCornerRadius:rotation];
    
    //旋轉角度
    CGFloat angle = arc4random_uniform(180) /180.0 * M_PI;
    
    [self.myLayer setTransform:CATransform3DMakeRotation(angle, 0, 0, 1)];

    self.myLayer.backgroundColor = [UIColor colorWithRed:arc4random_uniform(255.0)/255.0 green:arc4random_uniform(255.0)/255.0 blue:arc4random_uniform(255.0)/255.0 alpha:1].CGColor;
    
}

  • UIView的根圖層創建工作完全由iOS負責完成,無法重新創建,但是可以往根圖層中添加子圖層或移除子圖層
Snip20160819_7.png
  • 基礎動畫 - CABasicAnimation

Core Animation是蘋果公司給我們提供的一套強大的核心動畫類庫,而核心動畫又分為基礎動畫、關鍵幀動畫、動畫組、轉場動畫。這里只做 基礎動畫(CABasicAnimation)的筆記。

  • CABasicAnimation:基礎動畫,通過屬性修改進行動畫參數控制,只有初始狀態和結束狀態
    [super viewDidLoad];
    
    self.view.backgroundColor=[UIColor orangeColor];
    
    // 自定義一個圖層
    _layer=[[CALayer alloc]init];
    
    _layer.bounds=CGRectMake(0, 0, 30, 30);
    
    _layer.position=CGPointMake(50, 150);
    
    _layer.backgroundColor = [UIColor redColor].CGColor;

    [self.view.layer addSublayer:_layer];
    
    [self createYellowView];
}
- (void)createYellowView {
    
    _yellowView = [[UIView alloc] initWithFrame:CGRectMake(100, 150, 30, 30)];
    
    _yellowView.backgroundColor = [UIColor yellowColor];
    
    [self.view addSubview:_yellowView];
    
}

- (void)yellowRunPoint:(CGPoint)location {
    
    [UIView animateWithDuration:3.0 animations:^{
        
        _yellowView.center = location;
        
    }];
}

#pragma mark 移動動畫
-(void)translatonAnimation:(CGPoint)location{
    //1.創建動畫并指定動畫屬性
    CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@"position"];
    
    //2.設置動畫屬性初始值和結束值
    
    // basicAnimation.fromValue=[NSNumber numberWithInteger:50];//可以不設置,默認為圖層初始狀態
    basicAnimation.toValue=[NSValue valueWithCGPoint:location];
    
    //設置其他動畫屬性
    basicAnimation.duration=3.0;//動畫時間5秒
    
   // basicAnimation.repeatCount=HUGE_VALF;//設置重復次數,HUGE_VALF可看做無窮大,起到循環動畫的效果
    
    //basicAnimation.removedOnCompletion=YES;//運行一次是否移除動畫
    
    //3.添加動畫到圖層,注意key相當于給動畫進行命名,以后獲得該動畫時可以使用此名稱獲取
    [_layer addAnimation:basicAnimation forKey:@"BasicAnimation_Translation"];
    
    
}
#pragma mark 點擊事件
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    
    UITouch *touch=touches.anyObject;
    
    CGPoint location= [touch locationInView:self.view];
    //創建并開始動畫
    [self translatonAnimation:location];
    
    [self yellowRunPoint:location];
    
}
  • 紅色VIew是和黃色View的動畫效果是一樣的,所紅色VIew是黃色View的系統封裝方法的實現


先寫這么多,寫博客太累。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,566評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,141評論 5 13
  • 概覽 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你...
    Yiart閱讀 3,864評論 3 34
  • 在iOS實際開發中常用的動畫無非是以下四種:UIView動畫,核心動畫,幀動畫,自定義轉場動畫。 1.UIView...
    請叫我周小帥閱讀 3,155評論 1 23
  • Core Animation Core Animation,中文翻譯為核心動畫,它是一組非常強大的動畫處理API,...
    45b645c5912e閱讀 3,056評論 0 21