
Pop 是一個可擴展的動畫引擎,可用于實現任意iOS對象的任意屬性的動態變化,支持一般動畫,彈性動畫和漸變動畫三種類型.
pod 'pop', '~> 1.0'在需要使用POP的地方,引入頭文件:
#import <pop/POP.h>把動畫添加到你想要擁有動態變化的對象上面,即可開始動畫:
POPSPRingAnimation *anim = [POPSpringAnimation animation];...[layer pop_addAnimation:anim forKey:@"myKey"];可以根據開始動畫時傳入的鍵,來移除對應的動畫:
[layer pop_removeAnimationForKey:@"myKey"];開始動畫時傳入的鍵,也可以用來查詢是否存在某個動畫.更新一個正在執行的動畫的 toValue,可以無縫實現動畫效果間的過渡:
anim = [layer pop_animationForKey:@"myKey"];if (anim) { /* 更新toValue為一個新值. */ anim.toValue = @(42.0);} else { /* 創建并開始一個新的動畫. */ ....}上面的例子是以圖層為例.Pop是以NSObject的擴展方式實現的.也就是說: 任何NSObject及其子類都可以通過Pop添加動畫效果.
有四種動畫類型: 彈性動畫,漸弱動畫,基礎動畫和自定義動畫.
彈性動畫,可以給對象一個有活力的彈跳效果.下面的例子中,我們使用彈性動畫來使圖層的邊框值從它的當前值變化為(0, 0 ,400, 400):
POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 400, 400)];[layer pop_addAnimation:anim forKey:@"size"];漸變動畫,可以讓對象緩慢地停止變化.下面的例子,我們使圖層的橫坐標從當前值以1000像素每秒的速度漸變:
POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];anim.velocity = @(1000.);[layer pop_addAnimation:anim forKey:@"slide"];基礎動畫可以用來在指定的時間段動態改變屬性的值.在默認的時間周期內動態讓視圖的透明度從0.0變化到1.0來實現淡入的效果:
POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha];anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaSEOut];anim.fromValue = @(0.0);anim.toValue = @(1.0);[view pop_addAnimation:anim forKey:@"fade"];POPCustomAnimation 用來創建自定義動畫和過渡效果.它通過管理 CADisplayLink 來管理時間與動畫的關聯性.更多細節,詳見頭文件.
動畫屬性由POPAnimatableProperty類管理,用來指定在哪個屬性上應用動畫效果.在下面的例子中,我們創建了一個彈性動畫,并且顯示設置動畫屬性為與-[CALayer bounds]對應的屬性:
POPSpringAnimation *anim = [POPSpringAnimation animation];anim.property = [POPAnimatableProperty propertyWithName:kPOPLayerBounds];這個框架愛預先實現了了許多圖層和視圖共用的動畫屬性,你可以在自己的項目中直接使用.你也可以通過創建POPAnimatableProperty類的實例,來創建一個自定義的動畫屬性.下面的例子中,我們定義了一個自定義的volume動畫屬性:
prop = [POPAnimatableProperty propertyWithName:@"com.foo.radio.volume" initializer:^(POPMutableAnimatableProperty *prop) { // 讀取動畫屬性的值 prop.readBlock = ^(id obj, CGFloat values[]) { values[0] = [obj volume]; }; // 設置動畫屬性的值. prop.writeBlock = ^(id obj, const CGFloat values[]) { [obj setVolume:values[0]]; }; // 力學上的臨界值 prop.threshold = 0.01;}];anim.property = prop;系統預定義的動畫屬性也是由上面例子的機制定義的,自定義動畫屬性時,很有借鑒價值.完整的預定義的動畫屬性列表和他們實現的具體細節參見POPAnimatableProperty.h:
/** 圖層(CALayer)通用動畫屬性. */extern NSString * const kPOPLayerBackgroundColor;extern NSString * const kPOPLayerBounds;extern NSString * const kPOPLayerCornerRadius;extern NSString * const kPOPLayerBorderWidth;extern NSString * const kPOPLayerBorderColor;extern NSString * const kPOPLayerOpacity;extern NSString * const kPOPLayerPosition;extern NSString * const kPOPLayerPositionX;extern NSString * const kPOPLayerPositionY;extern NSString * const kPOPLayerRotation;extern NSString * const kPOPLayerRotationX;extern NSString * const kPOPLayerRotationY;extern NSString * const kPOPLayerScaleX;extern NSString * const kPOPLayerScaleXY;extern NSString * const kPOPLayerScaleY;extern NSString * const kPOPLayerSize;extern NSString * const kPOPLayerSubscaleXY;extern NSString * const kPOPLayerSubtranslationX;extern NSString * const kPOPLayerSubtranslationXY;extern NSString * const kPOPLayerSubtranslationY;extern NSString * const kPOPLayerSubtranslationZ;extern NSString * const kPOPLayerTranslationX;extern NSString * const kPOPLayerTranslationXY;extern NSString * const kPOPLayerTranslationY;extern NSString * const kPOPLayerTranslationZ;extern NSString * const kPOPLayerZPosition;extern NSString * const kPOPLayerShadowColor;extern NSString * const kPOPLayerShadowOffset;extern NSString * const kPOPLayerShadowOpacity;extern NSString * const kPOPLayerShadowRadius;/** 圖形層(CAShapeLayer)通用動畫屬性. */extern NSString * const kPOPShapeLayerStrokeStart;extern NSString * const kPOPShapeLayerStrokeEnd;extern NSString * const kPOPShapeLayerStrokeColor;extern NSString * const kPOPShapeLayerFillColor;/** 視圖約束(NSLayoutConstraint)通用動畫屬性. */extern NSString * const kPOPLayoutConstraintConstant;/** 視圖(UIView)通用動畫屬性. */extern NSString * const kPOPViewAlpha;extern NSString * const kPOPViewBackgroundColor;extern NSString * const kPOPViewBounds;extern NSString * const kPOPViewCenter;extern NSString * const kPOPViewFrame;extern NSString * const kPOPViewScaleX;extern NSString * const kPOPViewScaleXY;extern NSString * const kPOPViewScaleY;extern NSString * const kPOPViewSize;extern NSString * const kPOPViewTintColor;/** 滾動視圖(UIScrollView)通用動畫屬性. */extern NSString * const kPOPScrollViewContentOffset;extern NSString * const kPOPScrollViewContentSize;extern NSString * const kPOPScrollViewZoomScale;extern NSString * const kPOPScrollViewContentInset;/** 列表(UITableView)通用動畫屬性. */extern NSString * const kPOPTableViewContentOffset;extern NSString * const kPOPTableViewContentSize;/** 集合視圖(UICollectionView)通用動畫屬性. */extern NSString * const kPOPCollectionViewContentOffset;extern NSString * const kPOPCollectionViewContentSize;/** 導航欄(UINavigationBar)通用動畫屬性. */extern NSString * const kPOPNavigationBarBarTintColor;/** 工具欄(UIToolBar)通用動畫屬性. */extern NSString * const kPOPToolbarBarTintColor;/** 標簽欄(UITabBar)通用動畫屬性. */extern NSString * const kPOPTabBarBarTintColor;/** 標簽(UILabel)通用動畫屬性. */extern NSString * const kPOPLabelTextColor;新聞熱點
疑難解答