CALayer动画的暂停,恢复,以及结束时候的回调

源码如下:

//
//  ViewController.m
//  AnimationLineView
//
//  Created by YouXianMing on 14/11/7.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "YXGCD.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // layer
    CALayer *layer        = [CALayer layer];
    layer.frame           = CGRectMake(100, 100, 3, 3);
    layer.backgroundColor = [UIColor redColor].CGColor;
    layer.delegate        = self;
    [self.view.layer addSublayer:layer];

    // 动画
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds"];
    animation.fromValue         = [NSValue valueWithCGRect:layer.frame];
    animation.toValue           = [NSValue valueWithCGRect:CGRectMake(100, 100, 100, 3)];
    animation.duration          = 3.f;
    animation.delegate          = self;                   // 设置代理
    [layer addAnimation:animation forKey:@"YouXianMing"]; // 添加动画

    // 暂停动画
    [GCDQueue executeInMainQueue:^{
        [self pauseLayer:layer];
    } afterDelaySecs:1.5f];

    // 恢复动画
    [GCDQueue executeInMainQueue:^{
        [self resumeLayer:layer];
    } afterDelaySecs:3.f];

    // 移除动画(根据key值)
    [GCDQueue executeInMainQueue:^{
        [layer removeAnimationForKey:@"YouXianMing"];
    } afterDelaySecs:3.5f];
}

/**
 *  动画确实停止了
 *
 *  @param anim CAAnimation对象
 *  @param flag 是否是正常的移除
 */
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
    NSLog(@"动画:%@ 是否动画中途被移除了:%d", anim, flag);
}

/**
 *  暂停
 *
 *  @param layer 被停止的layer
 */
-(void)pauseLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
    layer.speed               = 0.0;
    layer.timeOffset          = pausedTime;
}

/**
 *  恢复
 *
 *  @param layer 被恢复的layer
 */
-(void)resumeLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime     = [layer timeOffset];
    layer.speed                   = 1.0;
    layer.timeOffset              = 0.0;
    layer.beginTime               = 0.0;
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    layer.beginTime               = timeSincePause;
}

@end

以下是需要注意的地方:

时间: 2024-08-09 02:09:38

CALayer动画的暂停,恢复,以及结束时候的回调的相关文章

Unity3D游戏开发之从"复活"和"暂停/恢复"谈游戏数据配置管理

随着游戏制作技术的不断发展,在经历了从2D到3D.从单机到网游.从PC游戏到移动游戏的种种演变后,玩家对于游戏质量的要求越来越高,游戏制作的难度相应地增加,整个游戏研发的体系开始变得庞大而复杂,由此就产生了游戏数据配置和管理的相关问题.本文将从游戏中的"复活"和"暂停/恢复"这两个应用场景的角度来谈谈在游戏开发中如何对游戏中的数据进行管理和配置. 为什么要谈游戏数据的配置和管理 不知道大家是不是会和博主有一样的想法,就是当你回头来思考游戏开发的时候,你常常会发现,如

GIF动画,菊花动画,UIView动画,CoreAnimation动画(CALayer动画)的用法

1.GIF动画 1 // 创建一个显示图片的imageView // viewController创建 2 UIImageView *showGifImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 414, 736)]; 3 [self.view addSubview:showGifImageView]; 4 5 6 //创建一个存储图片的数组 7 NSMutableArray *saveImageViewArray

iOS多线程与网络开发之大文件下载 (边下边写/暂停恢复下载/压缩解压zip/多线程下载)

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源码传送:http://dwz.cn/Nret1 A.需求 边下边写入硬盘 显示下载进度 暂停/恢复 下载 解压文件 多线程下载 B.基本知识 1

iOS动画:UIView动画和CALayer动画(CABasicAnimation、CAKeyframeAnimation的使用)

iOS中的动画有两种实现方式,一种是UIView来实现动画,另一种动画是通过CALayer来实现,下面介绍两种动画的简单实现: 一.UIView动画的实现 UIView使用Context来实现动画 关键代码: //参数1 动画名称 参数2 要实现动画的对象上下文          [UIView beginAnimations:@"attribute" context:_showImageView];          //设置动画的时间     [UIView setAnimatio

android 逐帧动画的播放与播放结束操作对象

逐帧动画的xml代码: 1 <?xml version="1.0" encoding="utf-8"?> 2 <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 3 android:oneshot="true" > 4 5 <item 6 android:drawable="@drawabl

JS---封装缓动(变速)动画函数---增加任意多个属性&amp;增加回调函数

封装缓动(变速)动画函数---增加任意多个属性&增加回调函数 回掉函数fn,在所有元素到达目的位置后,判断是否传入一个函数,有就调用 if(fn){fn()}; 这样一次点击,产生多个动画 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>title</title> <style> *

豆瓣电台笔记2:增加暂停/恢复歌曲的时候同时停止/恢复唱片上的动画

//MARK: 暂停layer上的动画 func pauseLayer(layer: CALayer) { let pausedTime: CFTimeInterval = layer.convertTime(CACurrentMediaTime(), fromLayer: nil) layer.speed = 0.0 layer.timeOffset = pausedTime } //MARK: 继续layer上的动画 func resumeLayer(layer: CALayer) { le

CoreAnimation (CALayer 动画)

CoreAnimation基本介绍: CoreAnimation动画位于iOS框架的Media层 CoreAnimation动画实现需要添加QuartzCore.Framework CoreAnimation基本上是LayerAnimation CoreAnimation分类: CoreAnimation作用: CoreAnimation CALayer基本介绍 CALayer的常用属性 CABasicAnimation CAKeyframeAnimation CAAnimationGroup

HTML5超酷秒表动画 可暂停和重置秒表

关于HTML5和CSS3的时钟应用在之前我们已经分享过不少了,还有一些HTML5的日期选择应用.今天我们要分享一款基于HTML5和CSS3的圆盘秒表动画,秒表可以精确到0.001秒,并且可以在计时过程中暂停计时,同时秒表可以随时重置. 在线演示 下面来分析一下实现的源代码,主要由HTML和CSS代码组成,CSS相对比较复杂,因为涉及到动画. HTML代码: <input id="help" name="controls" type="checkbox