Pop–實現任意iOS對象的任意屬性的動態變化,popios

來源:互聯網
上載者:User

Pop–實現任意iOS對象的任意屬性的動態變化,popios

簡介

Pop 是一個可擴充的動畫引擎,可用於實現任意iOS對象的任意屬性的動態變化,支援一般動畫,彈性動畫和漸層動畫三種類型.

  • 項目首頁: pop

  • 最新樣本: 點擊下載

  • 注意: 官方代碼中,並不包含執行個體,而是用於編譯的所有原始碼,建議自行建立工程,並結合下文的程式碼片段查看效果.

入門安裝通過CocoaPods安裝
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;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.