日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS简单动画实现方案

發布時間:2024/7/23 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS简单动画实现方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、仿射變換--CGAffineTransform
1.仿射變換,一種基于二維坐標的轉換功能。CGAffineTransform數據結構代表一個二維坐標系的轉換矩陣。
2.通過CGAffineTransform數據結構,可以構造二維坐標系內的平移、伸縮、旋轉矩陣。詳情可以參看蘋果開發文檔中關于該數據結構的解釋。
3.UIView類的一個屬性:transform,該屬性相對于bounds的中心位置,該屬性的類型為CGAffineTransform。初始化一個CGAffineTransform結構的矩陣,然后賦值給這個屬性,就可以完成二維坐標系內的轉換。
4.要形成動畫,可以使用第三部分(UIView集成動畫API)表述的方式,通過指定該屬性的前后狀態來形成動畫,或者自己動態設置這個屬性的值來形成動畫。
二、三維變換--CATransform3D
1.CATransform3D數據結構代表一個三維坐標系的矩陣,通過它可以構造三維坐標系內的平移、伸縮、旋轉矩陣。
2.UIView類的layer.transform屬性,該屬性相對于bounds的中心位置。該屬性的類型為CATransform3D。該屬性的使用方式以及動畫的形成,同上一部分,但是使用這個屬性實現三維動畫,可能沒那么好控制。
三、UIView集成的動畫API
1.UIView集成了一系列的動畫API。她的原理類似于flash動畫的制作,我們指定物體(控件)某些屬性在動畫中的開始和結束狀態,動畫API就會自動生成中間的幀,從而生成動畫。
2.使用示例(iOS4之前):? ? //在這里指定控件的開始狀態? ? //xxxxxxxxxx? ? [UIView beginAnimations:context:];? ? [UIView setAnimationDuration:];? ? [UIView setAnimationCurve:];? ? [UIView setAnimationDelegate:];? ? [UIView setAnimationWillStartSelector:@selector(animationDidStart:context)];? ? [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context)];? ? //在這里指定控件的結束狀態? ? //xxxxxxxxx? ? [UIView commitAnimations];
? ? 代理方法的聲明要使用如下方式:? ? (void)animationDidStart:(NSString *)animationID context:(void *)context? ? (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
3.使用示例(iOS4及以后)
(1)從iOS4系統之后,第2點提到整套API被廢棄了,應該使用block的方式來生成動畫。API列表如下:? ?animateWithDuration:delay:options:animations:completion:? ?animateWithDuration:animations:completion:? ?animateWithDuration:animations:? ?transitionWithView:duration:options:animations:completion:? ?transitionFromView:toView:duration:options:completion:
(2)使用此套API的時候,將控件的結束狀態寫在block中就可以了。
4.因為此系列API只指定動畫的開始和結束狀態,所以只能做一些有規律的動畫,否則API會不知道如何生成中間幀。常用動畫舉例:平移,伸縮,旋轉,透明度變化,顏色變化等等。
四、核心動畫
1.比較常用的動畫類:CATransition和CAAnimation。(1)CATransition用于使用系統集成的動畫。(2)CAAnimation用于實現自定義動畫,但是它是一個抽象類,不能直接使用,要子類化才能使用。類庫中存在已經子類化的類可以使用,比如CAKeyframeAnimation,此類通過給一個layer的屬性指定一組值,包含開始、結束以及中間的一些用來修正動畫的值,然后根據這些值,生成每一幀,來生成動畫。
2.CATransition動畫實現示例:? ?CATransition *transition = [CATransition animation];? ?transition.duration = 0.8;? ?transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];? ?transition.type = @"cube";? ?transition.subtype = kCATransitionFromRight;? ?[xxxView.layer addAnimation:transition forKey:nil];
3.CAAnimation使用示例:? ?CGFloat perAngle = M_PI / 64;?? ?CAKeyframeAnimation *keyFrameAnination = [CAKeyframeAnimation animationWithKeyPath:@"transform"];? ?[keyFrameAnination setDuration:2.0f];? ?[keyFrameAnination setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];? ?[keyFrameAnination setRemovedOnCompletion:NO];? ?[keyFrameAnination setFillMode:kCAFillModeForwards];? ?[keyFrameAnination setDelegate:self];? ?NSMutableArray *values = [[NSMutableArray alloc]initWithCapacity:10];? ?for (CGFloat clipRdn = angle; clipRdn >= 0; clipRdn -= perAngle) {? ? ? ? CATransform3D transform = CATransform3DMakeRotation(clipRdn, 0.0f, 1.0f, 0.0f);? ? ? ? transform.m34 = sin(clipRdn) / 4000.0f;? ? ? ? transform.m14 = -sin(clipRdn) / 4000.0f;? ? ? ? [values addObject:[NSValue valueWithCATransform3D:transform]];? ?}? ?[keyFrameAnination setValues:values];? ?[values release];? ?[self.imageView.layer addAnimation:keyFrameAnination forKey:@"animation"];

總結

以上是生活随笔為你收集整理的iOS简单动画实现方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。