欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ios開發(fā)旋轉(zhuǎn)動畫,ios屏幕動畫

iOS黑科技【動畫特效篇-1】 立方體翻轉(zhuǎn)特效--CubicTurning

今天起為大家?guī)韎OS動畫特效合集,APP如美女,動畫如衣裳,別讓你家的美女再裸奔了,趕緊為她披上漂亮的衣裝吧!

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的洛浦網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

廢話不多說,直接上效果:

親喜歡的話就直接帶走吧:

順便給個贊哦!(*  ̄3)(ε ̄ *)

下面進(jìn)入正題,是時候展現(xiàn)真正的技術(shù)了:

首先在控制器里添加一個scrollView,再在scrollView上的對應(yīng)位置上添加要展示的imageView(立方體視圖組),當(dāng)然也可以放上其它子控制器的view實(shí)現(xiàn)更多功能這個隨意不是重點(diǎn)

監(jiān)聽scrollView的滑動事件,在這里要先獲取到顯示的當(dāng)前頁、上一頁、下一頁,然后讓這三個頁面同時做3DTransform變換

這里記得要復(fù)原一下3D變換,不然滑快了會出現(xiàn)頁面錯亂

對了,記得添加一個很重要的透視變換函數(shù),核心在于仿射矩陣的m34屬性,這樣才會產(chǎn)生遠(yuǎn)小近大的3D效果,讓動畫更炫酷

這一期就到這里了,親們有什么意見和問題記得及時反饋哦,喜歡的話點(diǎn)個關(guān)注給個贊(づ ̄3 ̄)づ╭?~

ios 書本翻開頁面轉(zhuǎn)場動畫

這個效果是我參考 微信讀書 做的,給了我實(shí)現(xiàn)這個動畫的靈感。

這個動畫的原理也應(yīng)該很容易能看出來:

1、動畫開始前,兩個疊在一起的view,上面一層是書本的封面,下面一層是書的第一頁。

2、開始動畫時,封面會進(jìn)行兩個動畫,一個是縮放動畫,一個是旋轉(zhuǎn)動畫(繞Y軸旋轉(zhuǎn)90度);書頁僅執(zhí)行縮放動畫。

3、結(jié)束動畫時,封面view離開了屏幕,書頁全屏展示。

接下來,只需要實(shí)現(xiàn)UINavigationControllerDelegate,傳入一個遵循UIViewControllerAnimatedTransitioning這個協(xié)議的id類型對象就可以了。

下面是這個對象的實(shí)現(xiàn),核心的動畫部分就是我上面提到的思路。

demo地址

iOS 8自定義動畫轉(zhuǎn)場上手指南

篇一:iOS 8自定義動畫轉(zhuǎn)場上手指南

iOS 5發(fā)布的時候,蘋果針對應(yīng)用程序界面的設(shè)計(jì),提出了一種全新的,革命性的方法—Storyboard,它從根本上改變了現(xiàn)有的設(shè)計(jì)理念。iOS 5之前,每個視圖控制器通常都伴有一個Interface Builder的文件,叫nib或者xib,這個想法比較簡單:每個視圖控制器的界面應(yīng)該在各自的nib文件中設(shè)計(jì),而所有的nib文件一起構(gòu)成了整個應(yīng)用程序的界面。一方面,這個是很方便的,因?yàn)樗鼜?qiáng)迫開發(fā)者在界面設(shè)計(jì)的時候?qū)⒆⒁饬性诮缑嫔希硪环矫妫阶詈螅嗟奈募坏貌槐粍?chuàng)建,開發(fā)者將不能概覽應(yīng)用的整體界面。

隨著storyboard的產(chǎn)生,上面的這些都成為了歷史,因?yàn)檫@種新方法受到了開發(fā)者社區(qū)的廣泛使用。相比老的技術(shù),storyboards提供了三個重要的優(yōu)勢:

整個界面設(shè)計(jì)只發(fā)生在一個文件里。項(xiàng)目的總文件數(shù)量大大減少了,特別是在大項(xiàng)目里。當(dāng)然你可以使用額外的nib文件,并且允許只創(chuàng)建輔助視圖。

開發(fā)者能即時瀏覽應(yīng)用的界面和流程。 視圖控制器之間的轉(zhuǎn)換(界面設(shè)計(jì)的專業(yè)術(shù)語叫場景(scene)),以及轉(zhuǎn)換是如何發(fā)生的,在storyboard中已被完美地定義并清楚地呈現(xiàn)給了開發(fā)者。

綜上所述,場景之間的轉(zhuǎn)換構(gòu)成storyboard的特殊部分,我們一般把它叫做轉(zhuǎn)場(segue)。

轉(zhuǎn)場跟應(yīng)用的導(dǎo)航和處理是密切相關(guān)的,因?yàn)樗鞔_定義了一個視圖切換到另一個視圖的轉(zhuǎn)換細(xì)節(jié)。這些細(xì)節(jié)指定了是否應(yīng)用動畫,動畫的類型,當(dāng)然還有實(shí)際轉(zhuǎn)換時的準(zhǔn)備和性能。除此之外,轉(zhuǎn)場也用來將傳遞數(shù)據(jù)到下一個視圖控制器里,這個用法也很常見。

從編程的角度看,場景是UIStoryboardSegue類的一個對象,它第一次在iOS 5中介紹到。和其它類的對象

不同的是,這種對象不能直接的創(chuàng)建或使用。不過你可以指定轉(zhuǎn)場的屬性,然后在轉(zhuǎn)場即將發(fā)生時提供給它以達(dá)到目的。UIKit框架提供了一些帶默認(rèn)動畫過渡的預(yù)定義的轉(zhuǎn)場,包括:push segues(包括導(dǎo)航控制器的app),帶有動畫選擇的模態(tài)轉(zhuǎn)場(modal segues), popover segues。更高級的情況下,iOS SDK默認(rèn)的轉(zhuǎn)場可能不夠用,所以開發(fā)者必須實(shí)現(xiàn)他們的自定義轉(zhuǎn)場(custom segues)。 創(chuàng)建一個自定義轉(zhuǎn)場并不難,因?yàn)樗莍OS標(biāo)準(zhǔn)編程技術(shù)的組成部分。實(shí)際上你只需要生成UIStoryboardSegue的子類,并重載一個叫perform的方法即可。這個perform方法中必須實(shí)現(xiàn)自定義動畫的邏輯。從一個視圖控制器轉(zhuǎn)換到另一個以及返回操作的觸發(fā),也需要由開發(fā)者編程提供,這是一個標(biāo)準(zhǔn)的步驟。 在本教程中,我的目標(biāo)是向你們展示如何實(shí)現(xiàn)自定義轉(zhuǎn)場,并通過一個簡單的演示應(yīng)用介紹這個概念的所有方面。擁有創(chuàng)建自定義轉(zhuǎn)場的知識, 可以將你導(dǎo)

向開發(fā)更強(qiáng)大的app的道路。此外,對于最大化用戶體驗(yàn),并開發(fā)引人注目的漂亮應(yīng)用,自定義轉(zhuǎn)場也很有幫助。 如果你有興趣學(xué)習(xí)我剛剛說的話,就一起來探索教程里的`所有細(xì)節(jié)和自定義轉(zhuǎn)場的奧秘吧。

應(yīng)用程序概述不像我之前幾個教程提供了一個啟動項(xiàng)目,本教程我們將從頭開始創(chuàng)建app。事實(shí)上,我是故意這么做的,因?yàn)椋?xiàng)目中一些重要部分需要用到Interface Builder,所以我認(rèn)為從頭開始按部就班的來做,能讓你看清里面的細(xì)節(jié)。

正如我先前所說,我們將開發(fā)一個非常簡單的app,在這個應(yīng)用中我們將創(chuàng)建兩個自定義轉(zhuǎn)場。需要提前說明的是,我們的演示應(yīng)用將有三個視圖控制器,也就是在Interface Builder中有三個場景和三個相關(guān)類。默認(rèn)情況下,第一個是由Xcode創(chuàng)建的,因此我們只要再添加兩個。我們將創(chuàng)建的自定義轉(zhuǎn)場用來導(dǎo)航第一個視圖控制器到第二個

(以及返回),以及從第一個到第三個(以及返回)。第二個和第三個視圖控制器之間我們不添加任何聯(lián)系。

因此,我們需要創(chuàng)建兩個自定義轉(zhuǎn)場。因?yàn)橐ǚ祷兀恳粋€轉(zhuǎn)場需要創(chuàng)建兩個對應(yīng)的類(因此,共四個):第一個類里我們將實(shí)現(xiàn)從第一個視圖控制器到另一個轉(zhuǎn)換的所有自定義邏輯。第二個類實(shí)現(xiàn)返回到第一個視圖控制器的邏輯,或者換句話說要實(shí)現(xiàn)解除轉(zhuǎn)場(unwind segue)。后面會講到解除轉(zhuǎn)場,現(xiàn)在只需要記住這就是用來讓我們返回到前一個視圖控制器的轉(zhuǎn)場。

視圖控制器本身沒什么需要做的。我們會用一個label注明視圖控制器的名稱,每一個會有一個不同的背景顏色,可以讓我們很容易地查看轉(zhuǎn)換(是的,這將是一個五顏六色的應(yīng)用)。第一個和第二個視圖控制器也會多一個label,其中從其他視圖控制器傳來的自定義的消息將被顯示出來。

最后,轉(zhuǎn)場將在以下的動作發(fā)生的時候

篇二:Swift常用UIView Animation API使用

Swift常用UIView Animation API使用

本文默認(rèn)讀者有基礎(chǔ)動畫編寫能力

參數(shù)解釋

*如解釋有誤,請指出,謝謝*

1 duration: 動畫執(zhí)行時間

2 delay:動畫延遲執(zhí)行時間

3 options:

.Repeat:動畫永遠(yuǎn)重復(fù)的運(yùn)行

.Autoreverse:動畫執(zhí)行結(jié)束后按照相反的行為繼續(xù)執(zhí)行。該屬性只能和.Repeat屬性組合使用

.CurveLinear:動畫做線性運(yùn)動

.CurveEaseIn:動畫緩慢開始,然后逐漸加速

.CurveEaseOut:動畫迅速開始,在結(jié)束時減速

.CurveEaseInOut:動畫慢慢開始,然后加速,在結(jié)束之前減速.TransitionNone:沒有轉(zhuǎn)場動畫

.TransitionFlipFromTop :從頂部圍繞水平軸做翻轉(zhuǎn)動畫 .TransitionFlipFromBottom:從底部圍繞水平軸做翻轉(zhuǎn)動畫

.TransitionFlipFromLeft :從左側(cè)圍繞垂直軸做翻轉(zhuǎn)動畫

.TransitionFlipFromRight:從右側(cè)圍繞垂直軸做翻轉(zhuǎn)動畫

.TransitionCurlUp:從下往上做翻頁動畫

.TransitionCurlDown :從上往下做翻頁動畫

.TransitionCrossDissolve:視圖溶解消失顯示新視圖動畫

4 usingSpringWithDamping:彈簧阻力,取值范圍為0.0-1.0,數(shù)值越小“彈簧”振動效果越明顯。

5 initialSpringVelocity:動畫初始的速度(pt/s),數(shù)值越大初始速度越快。但要注意的是,初始速度取值較高而時間較短時,也會出現(xiàn)反彈情況。普通動畫

animateWithDuration:delay:options:animations:completion: class func animateWithDuration(_ duration: NSTimeInterval,

delay delay: NSTimeInterval,

options options: UIViewAnimationOptions,

animations animations: () - Void,

completion completion: ((Bool) - Void))

Animate changes to one or more views using the specified duration, delay, options, and completion handler.

對一個或者多個視圖按照相應(yīng)參數(shù)做固定動畫(翻譯純屬個人見解,有錯請指出)

animateWithDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:

class func animateWithDuration(_ duration: NSTimeInterval,

delay delay: NSTimeInterval,

usingSpringWithDamping dampingRatio: CGFloat,

initialSpringVelocity velocity: CGFloat,

options options: UIViewAnimationOptions,

animations animations: () - Void,

completion completion: ((Bool) - Void))

Performs a view animation using a timing curve corresponding to the motion of a physical spring.

對一個視圖按照相應(yīng)參數(shù)做彈性動畫(類似于彈簧,翻譯純屬個人見解,有錯請指出)

圖片借鑒Renfei Song's Blog,只為更清楚的展示調(diào)用兩個API的不同效果

Spring Animation 和普通的動畫的運(yùn)動曲線的對比:

Spring Animation, Ease-Out Animation 和 Linear Animation 的動畫效果:

轉(zhuǎn)場動畫

transitionWithView:duration:options:animations:completion: class func transitionWithView(_ view: UIView,

duration duration: NSTimeInterval,

options options: UIViewAnimationOptions,

animations animations: (() - Void),

completion completion: ((Bool) - Void))

Creates a transition animation for the specified container view.為指定的視圖構(gòu)建一個過渡動畫(翻譯純屬個人見解,有錯請指出)transitionFromView:toView:duration:options:completion:

class func transitionFromView(_ fromView: UIView,

toView toView: UIView,

duration duration: NSTimeInterval,

options options: UIViewAnimationOptions,

completion completion: ((Bool) - Void))

Creates a transition animation between the specified views using the given parameters.

在兩個給定視圖之間構(gòu)建過渡動畫(翻譯純屬個人見解,有錯請指出)

以上為UIView Animation的基礎(chǔ)動畫API,使用其實(shí)很簡單,就是要理解不同參數(shù)的意義。

篇三:iOS開發(fā)學(xué)習(xí)之核心動畫

核心動畫基本概念

基礎(chǔ)動畫(CABasicAnimation)

關(guān)鍵幀動畫(CAKeyframeAnimation)

動畫組

轉(zhuǎn)場動畫-CATransition

UIView的轉(zhuǎn)場動畫-雙視圖

   一、核心動畫基本概念

1.導(dǎo)入QuartzCore.framework框架

開發(fā)步驟

1).初始化一個動畫對象(CAAnimation)并且設(shè)置一些動畫相關(guān)屬性

2).CALayer中很多屬性都可以通過CAAnimation實(shí)現(xiàn)動畫效果,包括:opacity、position、transform、bounds、contents等(可以在API文檔中搜索:CALayer Animatable Properties)

3).添加動畫對象到層(CALayer)中,開始執(zhí)行動畫

4).通過調(diào)用CALayer的addAnimation:forKey增加動畫到層(CALayer)中,這樣就能觸發(fā)動畫。通過調(diào)用removeAnimationForKey可以停止層中的動畫

5).Core Animation的動畫執(zhí)行過程都是后臺操作的,不會阻塞主線程

2.屬性

1).duration:動畫的持續(xù)時間

2).repeatCount:重復(fù)次數(shù)(HUGE_VALF、MAX FLOAT無限重復(fù))

3).repeatDuration:重復(fù)時間(用的很少)

4).removedOnCompletion:默認(rèn)為Yes。動畫執(zhí)行完后默認(rèn)會從圖層刪除掉

5).fillMode

6).biginTime

7).timingFunction:速度控制函數(shù),控制動畫節(jié)奏

8).delegate

   二、基礎(chǔ)動畫(CABasicAnimation)

   如果只是實(shí)現(xiàn)簡單屬性變化的動畫效果,可以使用UIView的塊動畫替代基本動畫

1.屬性說明

-fromValue:keyPath相應(yīng)屬性值的初始值

-toValue:keyPath相應(yīng)屬性的結(jié)束值

2.動畫過程說明:

-隨著動畫的就行,在duration的持續(xù)時間內(nèi),keyPath相應(yīng)的屬性值從fromValue漸漸變?yōu)閠oValue

-keyPath內(nèi)容是CALayer的可動畫Animation屬性

-如果fillMode=kCAFillModeForwards同時removedOnCompletion=NO,那么在動畫執(zhí)行完畢后,圖層會保持顯示動畫執(zhí)行后的狀態(tài),但在實(shí)質(zhì)上,圖層的屬性值還是動畫執(zhí)行前的初始值,并沒有真正改變

3.代碼實(shí)現(xiàn)

位移需要考慮目標(biāo)點(diǎn)設(shè)定的問題

1.將動畫的所有方法封裝到一個類里面

MyCAHelper.h

#import

#import

#define kCAHelperAlphaAnimation @"opacity"; ?// 淡入淡出動畫 #define kCAHelperScaleAnimation @"transform.scale";// 比例縮放動畫

#define kCAHelperRotationAnimation @"transform.rotation";// 旋轉(zhuǎn)動畫

#define kCAHelperPositionAnimation @"position"; // 平移位置動畫

@interface MyCAHelper : NSObject

#pragma mark - 基本動畫統(tǒng)一調(diào)用方法

+ (CABasicAnimation *)myBasicAnimationWithType:(NSString *)animationTypeduration:(CFTimeInterval)duration from:(NSValue *)from

to:(NSValue *)to

autoRevereses:(BOOL)autoRevereses;

#pragma mark - 關(guān)鍵幀動畫方法

#pragma mark 搖晃動畫

+ (CAKeyframeAnimation

*)myKeyShakeAnimationWithDuration:(CFTimeInterval)duration

angle:(CGFloat)angle

repeatCount:(CGFloat)repeatCount;

#pragma mark 貝塞爾路徑動畫

+ (CAKeyframeAnimation *)myKeyPathAnimationWithDuration:(CFTimeInterval)durationpath:(UIBezierPath *)path;

#pragma mark 彈力仿真動畫

+ (CAKeyframeAnimation *)myKeyBounceAnimationFrom:(CGPoint)from

to:(CGPoint)to

duration:(CFTimeInterval)duration;

@end

MyCAHelper.m

#import "MyCAHelper.h"

@implementation MyCAHelper

#pragma mark - 基本動畫統(tǒng)一調(diào)用方法

+ (CABasicAnimation *)myBasicAnimationWithType:(NSString *)animationTypeduration:(CFTimeInterval)duration

from:(NSValue *)from

to:(NSValue *)to

autoRevereses:(BOOL)autoRevereses

{

// 1. 實(shí)例化一個CA動畫對象

CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:animationType];

// 2. 設(shè)置動畫屬性

[anim setDuration:duration];

[anim setFromValue:from];

[anim setToValue:to];

[anim setAutoreverses:autoRevereses];

return anim;

}

#pragma mark - 關(guān)鍵幀動畫方法

#pragma mark 搖晃動畫

+ (CAKeyframeAnimation

*)myKeyShakeAnimationWithDuration:(CFTimeInterval)duration

angle:(CGFloat)angle

repeatCount:(CGFloat)repeatCount

{

// 1. 初始化動畫對象實(shí)例

CAKeyframeAnimation *anim = [CAKeyframeAnimation

animationWithKeyPath:@"transform.rotation"];

// 2. 設(shè)置動畫屬性

[anim setDuration:duration];

[anim setValues:@[@(angle), @(-angle), @(angle)]];

[anim setRepeatCount:repeatCount];

return anim;

}

#pragma mark 貝塞爾路徑動畫

+ (CAKeyframeAnimation *)myKeyPathAnimationWithDuration:(CFTimeInterval)duration path:(UIBezierPath *)path

{

// 1. 初始化動畫對象實(shí)例

CAKeyframeAnimation *anim = [CAKeyframeAnimation

animationWithKeyPath:@"position"];

// 2. 設(shè)置動畫屬性

[anim setDuration:duration];

關(guān)于iOS開發(fā) 轉(zhuǎn)場動畫

CATransition類實(shí)現(xiàn)層的轉(zhuǎn)場動畫。你可以從一組預(yù)定義的轉(zhuǎn)換或者通過提供定制的CIFilter實(shí)例來指定轉(zhuǎn)場效果。

//定義個轉(zhuǎn)場動畫

CATransition *animation = [CATransition animation];

//轉(zhuǎn)場動畫持續(xù)時間

animation.duration = 0.2f;

//計(jì)時函數(shù),從頭到尾的流暢度???

animation.timingFunction=UIViewAnimationCurveEaseInOut;

//轉(zhuǎn)場動畫類型

animation.type = kCATransitionReveal;

//轉(zhuǎn)場動畫將去的方向

animation.subtype = kCATransitionFromBottom;

//動畫時你需要的實(shí)現(xiàn)

self.tabBarController.tabBar.hidden = YES;

//添加動畫 (轉(zhuǎn)場動畫是添加在層上的動畫)

self.tabBarController.tabBar.layer addAnimation:animation forKey:@"animation"];

說明:

duration:動畫持續(xù)的時長。

timingFunction:沒明白(誰明白的說明一下吧)

type:轉(zhuǎn)場動畫的類型。如果在一個自定義的轉(zhuǎn)場動畫中指定的過濾器屬性,此屬性將被忽略。

type共有四種類型:

NSString * const kCATransitionFade;//逐漸消失

NSString * const kCATransitionMoveIn;//移入

NSString * const kCATransitionPush;//平移(暫且這么稱呼吧)

NSString * const kCATransitionReveal;//顯露

默認(rèn)類型為kCATransitionFade。

subtype:轉(zhuǎn)場動畫將要去往的方向。

subtpye有四種類型:

NSString * const kCATransitionFromRight;

NSString * const kCATransitionFromLeft;

NSString * const kCATransitionFromTop;

NSString * const kCATransitionFromBottom;

默認(rèn)方向是nil。

[self.tabBarController.tabBar.layer addAnimation:animation forKey:@"animation"];

轉(zhuǎn)場動畫是添加給layer的!

switch (btn.tag) {

case 0:

animation.type = @"cube";//---立方體

break;

case 1:

animation.type = @"suckEffect";//103 吸走的效果

break;

case 2://前后翻轉(zhuǎn)效果

animation.type = @"oglFlip";//When subType is "fromLeft" or "fromRight", it's the official one.

break;

case 3:

animation.type = @"rippleEffect";//110波紋效果

break;

case 4:

animation.type = @"pageCurl";//101翻頁起來

break;

case 5:

animation.type = @"pageUnCurl";//102翻頁下來

break;

case 6:

animation.type = @"cameraIrisHollowOpen ";//107//鏡頭開

break;

case 7:

animation.type = @"cameraIrisHollowClose ";//106鏡頭關(guān)

break;

default:

break;

}

iOS核心動畫之圖片旋轉(zhuǎn)、脈沖動畫、水波紋動畫

下邊有整體效果,希望能幫助到你!

定義一個視圖

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

一、圖片旋轉(zhuǎn)三種方式:

第一種:根據(jù)CGPathAddArc 繪畫圖片旋轉(zhuǎn)路線:

/*

1、#CGMutablePathRef? _Nullable path# 路線

2、確定圓心#CGFloat x# #CGFloat y#

3、半徑#CGFloat radius#

4、起點(diǎn) #CGFloat startAngle# 結(jié)束 #CGFloat endAngle#

*/

CGPathAddArc(path, NULL, self.view.center.x, self.view.center.y, 0.1, 0, M_PI *2, 1);

CAKeyframeAnimation * frameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

frameAnimation.path= path;

CGPathRelease(path);

frameAnimation.delegate=self;

frameAnimation.duration=10;// 持續(xù)時間

frameAnimation.repeatCount = -1;// 重復(fù)次數(shù) 如果為0表示不執(zhí)行,-1表示不限制次數(shù),默認(rèn)為0

frameAnimation.autoreverses=NO;

frameAnimation.rotationMode = kCAAnimationRotateAuto;// 樣式

frameAnimation.fillMode = kCAFillModeForwards;

[self.imageView.layeraddAnimation:frameAnimationforKey:nil];

第二種:

[UIView animateWithDuration:20.0f animations:^{

? ? if (self.imageView) {

? ? ? ?self.imageView.transform = CGAffineTransformMakeRotation(M_PI*5);

?}

}];

第三種:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

//默認(rèn)是順時針效果,若將fromValue和toValue的值互換,則為逆時針效果

animation.fromValue = [NSNumber numberWithFloat:0.f];

animation.toValue = [NSNumber numberWithFloat: M_PI *2];

animation.duration=30;

animation.autoreverses=NO;

animation.fillMode = kCAFillModeForwards;

animation.repeatCount = MAXFLOAT; //如果這里想設(shè)置成一直自旋轉(zhuǎn),可以設(shè)置為MAXFLOAT,否則設(shè)置具體的數(shù)值則代表執(zhí)行多少次

[self.imageView.layer addAnimation:animation forKey:nil];

持續(xù)旋轉(zhuǎn):

@property(nonatomic,assign) double angle;

CGAffineTransform endAngle = CGAffineTransformMakeRotation(self.angle * (M_PI / 180.0f));

[UIView animateWithDuration:0.01 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{

? ? self.imageView.transform= endAngle;

}completion:^(BOOLfinished) {

? ? self.angle+=10;

? ? [self startAnimation2];// 上邊任意一種方法回調(diào)

}];

// 當(dāng)視圖停止轉(zhuǎn)動時調(diào)用此方法重新轉(zhuǎn)動

-(void)endAnimation {

self.angle+=4;

[self startAnimation2];

}

二、水波紋動畫

屬性定義:幾個波紋定義幾個X 寬度可以用一個 也可以分開定義

@property (weak, nonatomic) IBOutlet UIView *backView;

@property(nonatomic,strong) CAShapeLayer * waterLayer1;

@property(nonatomic,strong) CAShapeLayer * waterLayer2;

@property(nonatomic,assign) CGFloat x;

@property(nonatomic,assign) CGFloat y;

@property(nonatomic,assign) CGFloat waveHeight;

@property(nonatomic,assign) CGFloat waveWidth;

@property(nonatomic,assign) int speedWave;

@property(nonatomic,assign) CGFloat waveAmplitude;

@property(nonatomic,assign) int speed;

@property(nonatomic,assign) CGFloat speed_H;

@property(nonatomic,assign) CGFloat offsetXT;

-(instancetype)init {// 給個初始值,下邊被除數(shù)不能為0

if (self == [super init]) {

self.speedWave = 3;

self.waveAmplitude = 3;

self.speed=3;

self.waveWidth = self.backView.frame.size.width;

self.waveHeight = self.backView.frame.size.height;

self.speed_H = self.backView.frame.size.height-20;

}

return self;

}

-(void)waterAnimation {

//? ? CGFloat y = _waveHeight*sinf(2.5*M_PI*i/_waveWidth + 3*_offset*M_PI/_waveWidth + M_PI/4) + _h;

self.waterLayer1 = [CAShapeLayer layer];

self.waterLayer1.fillColor = [UIColor yellowColor].CGColor;

[self.backView.layer addSublayer:self.waterLayer1];

self.waterLayer2 = [CAShapeLayer layer];

self.waterLayer2.fillColor = [UIColor redColor].CGColor;

[self.backView.layer addSublayer: self.waterLayer2];

//創(chuàng)建一個新的 CADisplayLink 對象,把它添加到一個runloop中,并給它提供一個 target 和selector 在屏幕刷新的時候調(diào)用

//CADispayLink相當(dāng)于一個定時器 會一直繪制曲線波紋 看似在運(yùn)動,其實(shí)是一直在繪畫不同位置點(diǎn)的余弦函數(shù)曲線

CADisplayLink * waveDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(getCurrentWave)];

[waveDisplayLinkaddToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

}

-(void)getCurrentWave {

// x位置

self.x+=self.speed;

//聲明第一條波曲線的路徑

CGMutablePathRef path = CGPathCreateMutable();

//設(shè)置起始點(diǎn)

CGPathMoveToPoint(path,nil,0,self.waveHeight);

CGFloaty =0.f;

//第一個波紋的公式

for(floatx =0.f; x =self.waveWidth; x++) {

? ? y =self.waveAmplitude*sin((200/self.waveWidth) * (x *M_PI/70) -self.x*M_PI/170) +self.speed_H*1;

? ? CGPathAddLineToPoint(path,nil, x, y);

? ? x++;

}

//把繪圖信息添加到路徑里

CGPathAddLineToPoint(path, nil, self.waveWidth, self.backView.frame.size.height);

CGPathAddLineToPoint(path, nil, 0, self.backView.frame.size.height);

//結(jié)束繪圖信息

CGPathCloseSubpath(path);

self.waterLayer1.path= path;

//釋放繪圖路徑

CGPathRelease(path);

[self? ? X2];

}

/// 第二條水波

-(void)X2 {

self.offsetXT += self.speedWave;

CGMutablePathRef pathT = CGPathCreateMutable();

CGPathMoveToPoint(pathT,nil,0,self.waveHeight+50);

CGFloatyT =0.f;

for(floatx =0.f; x =self.waveWidth; x++) {

? ? yT =self.waveAmplitude*1.6*sin((200/self.waveWidth) * (x *M_PI/100) -self.offsetXT*M_PI/170) +self.waveHeight;

? ? CGPathAddLineToPoint(pathT,nil, x, yT-10);

}

CGPathAddLineToPoint(pathT, nil, self.waveWidth, self.backView.frame.size.height);

CGPathAddLineToPoint(pathT, nil, 0, self.backView.frame.size.height);

CGPathCloseSubpath(pathT);

self.waterLayer2.path= pathT;

CGPathRelease(pathT);

}

三、脈沖效果動畫

@property (weak, nonatomic) IBOutlet UIView *pulseView;

@property(nonatomic,strong) CAShapeLayer * pulseLayer;

-(void)pulseAnimation {

CGFloat width = self.pulseView.bounds.size.width;

self.pulseLayer = [CAShapeLayer layer];

self.pulseLayer.bounds=CGRectMake(0,0, width, width);

self.pulseLayer.position=CGPointMake(width/2, width/2);

self.pulseLayer.backgroundColor = [UIColor clearColor].CGColor;

self.pulseLayer.path = [UIBezierPath bezierPathWithOvalInRect:self.pulseLayer.bounds].CGPath;

self.pulseLayer.fillColor = [UIColor colorWithRed: 0.3490196078 green:0.737254902 blue:0.8039215686 alpha:1].CGColor;

self.pulseLayer.opacity = 0.0;

CAReplicatorLayer * replicatorLayer = [CAReplicatorLayer layer];

replicatorLayer.bounds=CGRectMake(0,0, width, width);

replicatorLayer.position=CGPointMake(width/2, width/2);

replicatorLayer.instanceCount=4;// 復(fù)制層

replicatorLayer.instanceDelay=1;/// 頻率

[replicatorLayeraddSublayer:self.pulseLayer];

[self.pulseView.layeraddSublayer:replicatorLayer];

[self.pulseView.layerinsertSublayer:replicatorLayeratIndex:0];

}

-(void)startPulseAnimation {

CABasicAnimation * opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];

opacityAnimation.fromValue=@20;// 起始值 (strong 修飾的id值)

opacityAnimation.toValue=@30;// 結(jié)束值(strong 修飾的id值)

CABasicAnimation * scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];

scaleAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DScale(CATransform3DIdentity, 0.0, 0.0, 0.0)];

scaleAnimation.toValue =[NSValue valueWithCATransform3D:CATransform3DScale(CATransform3DIdentity, 1.0, 1.0, 1.0)];

CAAnimationGroup * groupAnimation = [CAAnimationGroup animation];

groupAnimation.animations=@[opacityAnimation, scaleAnimation];

groupAnimation.duration=20;

groupAnimation.autoreverses=NO;

groupAnimation.repeatCount=HUGE;

[self.pulseLayeraddAnimation:groupAnimationforKey:nil];

}

在此附上效果:

聽說有好得三方庫,我還沒有去找過,歡迎各位大佬推薦一個優(yōu)質(zhì)的三方。。。。。

喜歡的朋友點(diǎn)個贊唄!

iOS動畫效果三:CABAsicAnimation實(shí)現(xiàn)平移、旋轉(zhuǎn)和放大

使用CABAsicAnimation來實(shí)現(xiàn)動畫的放縮和旋轉(zhuǎn)是比較常用的,這篇主要介紹CABasicAnimation實(shí)現(xiàn)簡單的動畫效果

最終的效果圖為:

Demo地址

對應(yīng)的實(shí)現(xiàn)文件是SecondViewController

首先,我們先定義一個UIView以及三個button按鈕,分別對應(yīng)平移、放大和旋轉(zhuǎn)

在.h文件中定義相應(yīng)的屬性

之后,在.m文件中實(shí)現(xiàn)相應(yīng)的懶加載

將UIView以及button添加到界面上

之后,我們先來實(shí)現(xiàn)平移動畫,實(shí)現(xiàn)下面的方法

這里面遇到挺多坑的,下面逐條說明一下

接下倆,我們類似添加相應(yīng)的放大和旋轉(zhuǎn)的動畫效果

這樣,我們就完成了CABasicAnimation實(shí)現(xiàn)平移、放大和旋轉(zhuǎn)的動畫效果

這種動畫效果使用挺多的

另外,我們閱讀蘋果開發(fā)文檔時,我們可以看到協(xié)議CAAnimationDelegate,通過這個協(xié)議我們可以觀察動畫的開始和結(jié)束。

在平移動畫中,讓CABasicAnimation遵守這個協(xié)議

實(shí)現(xiàn)相應(yīng)的協(xié)議方法

比較重要的是,我們通過協(xié)議方法可以判斷動畫是否正常完成還是被打斷,這個我以前就碰到過動畫過程被UITableView 的reloadData打斷,導(dǎo)致動畫表現(xiàn)異常,具體可以看下這篇文章

CAnimationGroup動畫執(zhí)行時間比duration小

)

最終效果圖為:

Demo地址

我寫的同一系列的其他文章

iOS開發(fā)中動畫效果的探究(一)

iOS動畫效果的探究二:UIView Animation實(shí)現(xiàn)動畫

iOS動畫效果三:CABAsicAnimation實(shí)現(xiàn)平移、旋轉(zhuǎn)和放大

ios動畫效果四:使用Pop框架實(shí)現(xiàn)彈簧效果

iOS動畫效果五:CABasicAnimation實(shí)現(xiàn)繞定點(diǎn)旋轉(zhuǎn)的效果 ]

iOS動畫效果六:實(shí)現(xiàn)自定義的push轉(zhuǎn)場動畫

iOS動畫效果七:實(shí)現(xiàn)自定義present轉(zhuǎn)場動畫效果

iOS動畫效果八:實(shí)現(xiàn)類似系統(tǒng)的測滑返回效果

標(biāo)題名稱:ios開發(fā)旋轉(zhuǎn)動畫,ios屏幕動畫
地址分享:http://chinadenli.net/article7/dsissij.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)做網(wǎng)站網(wǎng)站營銷手機(jī)網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)