一丶原文翻譯
#import <Foundation/NSObject.h>
#import <pop/POPAnimationTracer.h>
#import <pop/POPGeometry.h>
@class CAMediaTimingFunction;
/**
動畫的抽象基類.
*/
@interface POPAnimation : NSObject
/**
* 動畫的名稱
* 根據(jù)這個屬性用來區(qū)別動畫;識別動畫
*/
@property (copy, nonatomic) NSString *name;
/**
動畫的開始時間;
默認是從0開始啟動
*/
@property (assign, nonatomic) CFTimeInterval beginTime;
/**
動畫的delegete
詳情查看查看[POPAnimationDelegate]
*/
@property (weak, nonatomic) id delegate;
/**
動畫的追蹤器
記錄所有動畫相關(guān)事件,還允許完成后對其進行查詢和分析;更多可以查看[POPAnimationTracer.h]
*/
@property (readonly, nonatomic) POPAnimationTracer *tracer;
/**
動畫開始的時候回調(diào)的block
*/
@property (copy, nonatomic) void (^animationDidStartBlock)(POPAnimation *anim);
/**
動畫達到toValue或者超過值的時候調(diào)用的block
*/
@property (copy, nonatomic) void (^animationDidReachToValueBlock)(POPAnimation *anim);
/**
動畫完成的時候調(diào)用的block
*/
@property (copy, nonatomic) void (^completionBlock)(POPAnimation *anim, BOOL finished);
/**
正在做動畫的時候調(diào)用;調(diào)用次數(shù)比較多
*/
@property (copy, nonatomic) void (^animationDidApplyBlock)(POPAnimation *anim);
/**
完成動畫的時候是否刪除動畫;
默認為YES;
設(shè)置NO的話
*/
@property (assign, nonatomic) BOOL removedOnCompletion;
/**
動畫是否已暫停;
在初始化的時候,默認YES;在動畫添加的時候,隱式暫停???在動畫完成的時候和 removedOnCompletion = NO的時候,動畫是暫停的,
*/
@property (assign, nonatomic, getter = isPaused) BOOL paused;
/**
動畫是否逆轉(zhuǎn);比如向前的動畫,做完之后,會再后退回來;
注意:時間是原來的2倍,動畫到toValue后,又回到原始的值;
delegete跟再做一次動畫一樣;
*/
@property (assign, nonatomic) BOOL autoreverses;
/**
重復動畫次數(shù);
= 0或者1不會重復;
注意:
delegete中
animationDidStart:每次動畫重復開頭調(diào)用;
animationDidReachToValue:每次到toValue的時候調(diào)用;
animationDidStop:finished:每次到toValue的時候調(diào)用,如果設(shè)置了autoreverses,動畫還未完成,返回NO;
設(shè)置了autoreverses,動畫時間是原來2倍;
*/
@property (assign, nonatomic) NSInteger repeatCount;
/**
一直重復做動畫;
delegete中animationDidStop將恒等于NO;
*/
@property (assign, nonatomic) BOOL repeatForever;
@end
@protocol POPAnimationDelegate <NSObject>
@optional
/**
動畫開始的時候調(diào)用
*/
- (void)pop_animationDidStart:(POPAnimation *)anim;
/**
動畫達到toValue或者超過的時候調(diào)用;
*/
- (void)pop_animationDidReachToValue:(POPAnimation *)anim;
/**
動畫停止
*/
- (void)pop_animationDidStop:(POPAnimation *)anim finished:(BOOL)finished;
/**
正在做動畫的時候調(diào)用;
*/
- (void)pop_animationDidApply:(POPAnimation *)anim;
@end
@interface NSObject (POP)
/**
添加動畫到接收器;
anim :要添加的動畫
key:動畫標識符,可以是任何字符串,但每個動畫必須唯一;
*/
- (void)pop_addAnimation:(POPAnimation *)anim forKey:(NSString *)key;
/**
刪除所有附件在接收器上的動畫;
*/
- (void)pop_removeAllAnimations;
/**
刪除附加在接收器上的所有關(guān)鍵
*/
- (void)pop_removeAnimationForKey:(NSString *)key;
/**
返回接收器所有動畫的key的數(shù)組;key的順序=動畫順序;
*/
- (NSArray *)pop_animationKeys;
/**
返回某個key的動畫,=nil表示不存在
*/
- (id)pop_animationForKey:(NSString *)key;
@end
/**
實現(xiàn)NSCopying協(xié)議;
*/
@interface POPAnimation (NSCopying) <NSCopying>
@end
二丶問題
1.@property (assign, nonatomic) CFTimeInterval beginTime; 的使用;
我想要動畫2秒后執(zhí)行
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() :
官方:
返回當前的絕對時間
其他閱讀:
CACurrentMediaTime() 是基于內(nèi)建時鐘的政基,能夠更精確更原子化地測量,
并且不會因為外部時間變化而變化(例如時區(qū)變化、夏時制痢畜、秒突變等),
但它和系統(tǒng)的uptime有關(guān),系統(tǒng)重啟后CACurrentMediaTime()會被重置趟脂。
2.@property (readonly, nonatomic) POPAnimationTracer *tracer; 的使用;
作用:輔助單元測試和debug;
可以看下[ POPAnimationTracer ] 這個類的api;挺簡單;
比如- (void)start
- (void)start
{
POPAnimationState *s = POPAnimationGetState(_animation);
s->tracing = true;
}
去看tracing;會定位到
跟蹤的開始;
默認是tracing(false);
再全局搜索下tracing;
跟動畫delegete,和startblock的回調(diào)位置一樣,功能一樣;
三丶其他:
翻譯有問題,留言告訴我下,謝謝;
以及有使用問題也可以留言,一起探討探討;