iOS_动画_POP_POPAnimation.h 翻译及使用

一丶原文翻译

#import <Foundation/NSObject.h>

#import <pop/POPAnimationTracer.h>
#import <pop/POPGeometry.h>

@class CAMediaTimingFunction;

/**
动画的抽象基类.
*/
@interface POPAnimation : NSObject

/**
  * 动画的名称
  * 根据这个属性用来区别动画;识别动画
*/
@property (copy, nonatomic) NSString *name;

/**
动画的开始时间;
默认是从0开始启动
*/
@property (assign, nonatomic) CFTimeInterval beginTime;

/**
动画的delegete
详情查看查看[POPAnimationDelegate]
*/
@property (weak, nonatomic) id delegate;

/**
动画的追踪器
记录所有动画相关事件,还允许完成后对其进行查询和分析;更多可以查看[POPAnimationTracer.h]
*/
@property (readonly, nonatomic) POPAnimationTracer *tracer;

/**
动画开始的时候回调的block
*/
@property (copy, nonatomic) void (^animationDidStartBlock)(POPAnimation *anim);

/**
  动画达到toValue或者超过值的时候调用的block
*/
@property (copy, nonatomic) void (^animationDidReachToValueBlock)(POPAnimation *anim);

/**
  动画完成的时候调用的block
*/
@property (copy, nonatomic) void (^completionBlock)(POPAnimation *anim, BOOL finished);

/**
正在做动画的时候调用;调用次数比较多
*/
@property (copy, nonatomic) void (^animationDidApplyBlock)(POPAnimation *anim);

/**
  完成动画的时候是否删除动画;
  默认为YES;
  设置NO的话
*/
@property (assign, nonatomic) BOOL removedOnCompletion;

/**
动画是否已暂停;
在初始化的时候,默认YES;在动画添加的时候,隐式暂停???在动画完成的时候和     removedOnCompletion = NO的时候,动画是暂停的,
*/
@property (assign, nonatomic, getter = isPaused) BOOL paused;

/**
动画是否逆转;比如向前的动画,做完之后,会再后退回来;
注意:时间是原来的2倍,动画到toValue后,又回到原始的值;
delegete跟再做一次动画一样;

*/
@property (assign, nonatomic) BOOL autoreverses;

/**
  重复动画次数;
   = 0或者1不会重复;
注意:
   delegete中
   animationDidStart:每次动画重复开头调用;
   animationDidReachToValue:每次到toValue的时候调用;
   animationDidStop:finished:每次到toValue的时候调用,如果设置了autoreverses,动画还未完成,返回NO;
设置了autoreverses,动画时间是原来2倍;

*/
@property (assign, nonatomic) NSInteger repeatCount;

/**
一直重复做动画;
delegete中animationDidStop将恒等于NO;
*/
@property (assign, nonatomic) BOOL repeatForever;

@end


@protocol POPAnimationDelegate <NSObject>
@optional

/**
动画开始的时候调用
*/
- (void)pop_animationDidStart:(POPAnimation *)anim;

/**
动画达到toValue或者超过的时候调用;
*/
- (void)pop_animationDidReachToValue:(POPAnimation *)anim;

/**
  动画停止
*/
- (void)pop_animationDidStop:(POPAnimation *)anim finished:(BOOL)finished;

/**
正在做动画的时候调用;
*/
- (void)pop_animationDidApply:(POPAnimation *)anim;

@end


@interface NSObject (POP)

/**
  添加动画到接收器;
  anim :要添加的动画
  key:动画标识符,可以是任何字符串,但每个动画必须唯一;
*/
- (void)pop_addAnimation:(POPAnimation *)anim forKey:(NSString *)key;

/**
删除所有附件在接收器上的动画;
*/
- (void)pop_removeAllAnimations;

/**
删除附加在接收器上的所有关键
*/
- (void)pop_removeAnimationForKey:(NSString *)key;

/**
返回接收器所有动画的key的数组;key的顺序=动画顺序;
*/
- (NSArray *)pop_animationKeys;

/**
返回某个key的动画,=nil表示不存在
*/
- (id)pop_animationForKey:(NSString *)key;

@end

/**
实现NSCopying协议;
*/
@interface POPAnimation (NSCopying) <NSCopying>

@end

二丶问题

1.@property (assign, nonatomic) CFTimeInterval beginTime; 的使用;

我想要动画2秒后执行

POPBasicAnimation * butAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter];
butAnimation.duration = 1.0f;
butAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(_btn.centerX,_btn.centerY + 400)];
butAnimation.beginTime = CACurrentMediaTime() + 2.0f;
[_btn pop_addAnimation:butAnimation forKey:@"btn_Animation"];

CACurrentMediaTime() :
官方:

Paste_Image.png
返回当前的绝对时间

其他阅读:

CACurrentMediaTime() 是基于内建时钟的,能够更精确更原子化地测量,
并且不会因为外部时间变化而变化(例如时区变化、夏时制、秒突变等),
但它和系统的uptime有关,系统重启后CACurrentMediaTime()会被重置。

借鉴:https://cnbin.github.io/blog/2016/03/21/nsdate-,-cfabsolutetimegetcurrent,-cacurrentmediatime-de-chai-yi/

2.@property (readonly, nonatomic) POPAnimationTracer *tracer; 的使用;

作用:辅助单元测试和debug;
可以看下[ POPAnimationTracer ] 这个类的api;挺简单;
比如- (void)start

- (void)start
{
  POPAnimationState *s = POPAnimationGetState(_animation);
  s->tracing = true;
}

去看tracing;会定位到

Paste_Image.png

跟踪的开始;
默认是tracing(false);
再全局搜索下tracing;

Paste_Image.png

跟动画delegete,和startblock的回调位置一样,功能一样;

三丶其他:

翻译有问题,留言告诉我下,谢谢;
以及有使用问题也可以留言,一起探讨探讨;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容