多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > iOS中Animation 動畫 UI_22

iOS中Animation 動畫 UI_22

來源:程序員人生   發布時間:2016-02-28 11:15:18 閱讀次數:2524次

1.iOS中我們能看到的控件都是UIView的子類,比如UIButton UILabel UITextField UIImageView等等

2.UIView能夠在屏幕的顯示是由于在創建它的時候內部自動添加1個CALayer圖層,通過這個圖層在屏幕上顯示的時候會調用1個drawRect: 的方法,完成繪圖,才能在屏幕上顯示

3.CALayer 本身就具有顯示功能,但是它不能響利用戶的交互事件,如果只是單純的顯示1個圖形,此時你可使用CALayer創建或是使用UIView創建,但是如果這個圖形想響利用戶交互事件,必須使用UIView或子類

動畫知識框圖以下:



#import "ViewController.h" #import "UITextField+Shake.h" @interface ViewController () @property (retain, nonatomic) IBOutlet UIImageView *balloon; @property (retain, nonatomic) IBOutlet UITextField *TF; @property (retain, nonatomic) IBOutlet UIButton *bounces; @property (retain, nonatomic) IBOutlet UIView *animationView; @property (retain, nonatomic) IBOutlet UIImageView *cloud; @end@implementation ViewController
- (void)viewDidLoad { [super viewDidLoad]; //取到當前視圖控制器自帶view的圖層 CALayer *layer = self.view.layer; // UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; // button.layer //button的圖層 //layer 的color必須是CGColor self.animationView.layer.backgroundColor = [UIColor greenColor].CGColor; }

//給TF創建1個類目:

UITextField+Shake.h #import @interface UITextField (Shake) - (void)shake; @end UITextField+Shake.m #import "UITextField+Shake.h" @implementation UITextField (Shake) //震動的方法 - (void)shake{ CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"position.x"]; keyFrame.values = @[@(self.center.x + 10),@(self.center.x),@(self.center.x - 10)]; keyFrame.repeatCount = 10; keyFrame.duration = 0.03; [self.layer addAnimation:keyFrame forKey:nil]; } @end



開始動畫按鈕點擊事件

- (IBAction)handleAnimation:(UIButton *)sender { //UIView的屬性動畫 [self handlePropertyAnimation]; //UIView的屬性動畫 Block情勢 [self handlePrepertyAnimationBlock]; //UIView的過渡動畫 [self handleTrabsitionAnimation]; //CALayer動畫 [self handleCALayer]; //CALayer 的基礎動畫 [self handleBasicAnimation]; //CALayer的關鍵幀動畫 [self handleKeyFrameAnimation]; //UITextField 調用輸入震動框方法 [self.TF shake]; //CALayer的過渡動畫 [self handleLayerCATransactionAnimation]; //CAAinmationGroup 分組動畫 [self handleAnimatonGroup]; }


//UIView的屬性動畫 可動畫的屬性 : frame center bounds alpha backgroundColor transfrom

//修改屬性做動畫,動畫結束后屬性修改的結果是真實的作用到動畫的視圖上,不能恢復到之前的模樣

- (void)handlePropertyAnimation{ //iOS4.0之前必須把要修改的可動畫屬性寫在begin 和 commit 之間 //開始動畫 [UIView beginAnimations:nil context:nil]; //指定代理 動畫的代理不需要遵守協議,由于此代理就沒有制定協議 [UIView setAnimationDelegate:self]; //設置動畫的延續時間 [UIView setAnimationDuration:3.0]; //設置動畫的重復次數 給重復效果旋轉效果立即消失 [UIView setAnimationRepeatCount:3.0]; //設置動畫的反轉效果 [UIView setAnimationRepeatAutoreverses:YES]; //設置動畫的變化速度 [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //如果要實現這個方法必須設置代理,此方法在動畫結束后觸發 [UIView setAnimationDidStopSelector:@selector(makeAnimationBack)]; //修改屬性做動畫 //1.center 修改中心點 CGPoint center = self.animationView.center; center.y += 10; self.animationView.center =center; //2.修改透明度 alpha self.animationView.alpha = 0.0; //3.變形 tranform //<#CGAffineTransform t#> 之前形變量 //旋轉的角度180/4 self.animationView.transform = CGAffineTransformRotate(self.animationView.transform, M_PI_4); self.animationView.transform = CGAffineTransformScale(self.animationView.transform, 0.5, 0.5); //提交動畫 [UIView commitAnimations]; }


//恢復到視圖之前的狀態


- (void)makeAnimationBack{ // self.animationView.center = self.view.center; self.animationView.alpha = 1.0; //恢復到tranform最初狀態,最初狀態就在CGAffineTransformIdentity記錄 self.animationView.transform = CGAffineTransformIdentity; } //UIView的屬性動畫 Block情勢 - (void)handlePrepertyAnimationBlock{ //iOS4.0以后使用block的情勢做動畫 __block typeof(self)weakSelf = self; //1.block 的第1種情勢 //01.動畫的延續時間 // [UIView animateWithDuration:2 animations:^{ // //1.修改中心點 // CGPoint center = weakSelf.animationView.center; // center.y += 50; // weakSelf.animationView.center = center; // //2.透明度 // weakSelf.animationView.alpha = 0.0; // //3.變形 // weakSelf.animationView.transform = CGAffineTransformRotate(weakSelf.animationView.transform, M_PI_4); //}]; //2.block的第2種情勢 [UIView animateWithDuration:2 animations:^{ //1.取得中心點 CGPoint center = weakSelf.animationView.center; //改變中心點 center.y += 50; weakSelf.animationView.center =center; //2.透明度 weakSelf.animationView.alpha = 0.0; //3.形變修改transform weakSelf.animationView.transform = CGAffineTransformScale(weakSelf.animationView.transform, 0.5, 0.2); } completion:^(BOOL finished) { //返回動畫之前的狀態 [weakSelf makeAnimationBack]; }]; //3.block的第3種情勢 //01:延續時間 //02:動畫履行的延遲時間 //03:設置動畫的殊效 //04:修睦的動畫屬性 //05:動畫履行結束后的block塊 [UIView animateWithDuration:3 delay:1 options:UIViewAnimationOptionAllowAnimatedContent animations:^{ //1.取得中心點 CGPoint center = weakSelf.animationView.center; //改變中心點 center.y += 50; weakSelf.animationView.center =center; //2.透明度 weakSelf.animationView.alpha = 0.0; //3.形變修改transform weakSelf.animationView.transform = CGAffineTransformScale(weakSelf.animationView.transform, 0.5, 0.2); } completion:^(BOOL finished) { //返回動畫之前的狀態 [weakSelf makeAnimationBack]; }]; //block的第4種情勢 //參數1:動畫延續時間 //參數2:動畫的延遲時間 //參數3:設置彈簧的強度 范圍(0.0~1.0) //參數4:設置彈簧的速度 //參數5:動畫效果 //參數6:改變動畫的屬性寫在這里 //參數7:結束動畫的時候調用的block [UIView animateWithDuration:2 delay:1 usingSpringWithDamping:0.5 initialSpringVelocity:500 options:UIViewAnimationOptionCurveEaseInOut animations:^{ CGPoint center = weakSelf.bounces.center; center.y += 10; weakSelf.bounces.center = center; //transform weakSelf.bounces.transform = CGAffineTransformScale(weakSelf.bounces.transform, 1.2, 1.2); } completion:^(BOOL finished) { CGPoint center = weakSelf.bounces.center; center.y -= 10; weakSelf.bounces.center = center; weakSelf.bounces.transform = CGAffineTransformIdentity; }]; }


//UIView的過渡動畫


- (void)handleTrabsitionAnimation{ __block typeof(self)weakSelf = self; //01:對哪一個視圖添加過渡動畫 //02:動畫經常 //03:動畫效果 [UIView transitionWithView:self.animationView duration:2 options:UIViewAnimationOptionAllowAnimatedContent animations:^{ weakSelf.animationView.transform = CGAffineTransformRotate(weakSelf.animationView.transform, M_PI_4); } completion:nil]; }


//CALayer動畫,修改layer層的屬性做動畫并沒有真實的作用到這個視圖上,動畫知識1種假象

- (void)handleCALayer{ //CALyer 動畫就是對layer做動畫 //邊框的寬 self.animationView.layer.borderWidth = 10.0; //邊框色彩 self.animationView.layer.borderColor = [UIColor redColor].CGColor; //切圓角 // self.animationView.layer.cornerRadius = 100; //取出layer過剩的部份 // self.animationView.layer.masksToBounds = YES; //減掉layer多出的部份 // self.animationView.clipsToBounds = YES; //背景圖片 self.animationView.layer.contents = (id)[UIImage imageNamed:@"WDGJ785Q{`CKL4J}1{_4{(Y.jpg"].CGImage; //視圖1創建出來的時候 錨點 基準點 中心點3個點是重合的 //錨點 anchorPoint 決定layer層上的哪一個點是position 錨點默許是(0.5,0.5),跟視圖的中心點重合 self.animationView.layer.anchorPoint = CGPointMake(0.5, 0); self.animationView.transform = CGAffineTransformRotate(self.animationView.transform, M_PI_4); //基準點 Position 決定當前視圖的layer,在父視圖的位置,它以父視圖的坐標系為準 self.animationView.layer.position = CGPointMake(160, 184); }


//CALayer 的動畫基類:CAAnimation

//CABasicAnimation  基礎動畫


- (void)handleBasicAnimation{ //CA動畫是根據KVC的原理,就修改layer的屬性,以到達做動畫的效果 CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"position.x"]; basic.fromValue = @(⑻0); basic.toValue = @(400); //設置動畫延續的時間 basic.duration = 5.0; //設置動畫重復的次數 basic.repeatCount = 1000; [self.cloud.layer addAnimation:basic forKey:nil]; }


//CAKeyFrameAnimation 關鍵幀動畫


- (void)handleKeyFrameAnimation{ CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"position"]; CGPoint point1 = self.cloud.center; CGPoint point2 = CGPointMake(160, 100); CGPoint point3 = CGPointMake(270, self.cloud.center.y); //把1組要播放的動畫需求的數值,按順序放到數組中,此時動畫履行的效果,就會依照數組中數據的順序產生變化; //轉化point結構體類型 轉化成對象類型 NSValue *value1 = [NSValue valueWithCGPoint:point1]; NSValue *value2 = [NSValue valueWithCGPoint:point2]; NSValue *value3 = [NSValue valueWithCGPoint:point3]; keyFrame.repeatCount = 1000; keyFrame.duration = 15.0; keyFrame.values = @[value1,value2,value3,value1]; [self.cloud.layer addAnimation:keyFrame forKey:nil]; }


//CATransition CALayer 的過度動畫

- (void)handleLayerCATransactionAnimation{ /* 各種動畫效果 其中除fade, `moveIn, `push , `reveal ,其他屬于似有的API(我是這么認為的,可以點進去看下注釋). * ↑↑↑上面4個可以分別使用kCATransitionFade, kCATransitionMoveIn, kCATransitionPush, kCATransitionReveal來調用. * @"cube" 立方體翻滾效果 * @"moveIn" 新視圖移到舊視圖上面 * @"reveal" 顯現效果(將舊視圖移開,顯示下面的新視圖) * @"fade" 交叉淡化過渡(不支持過渡方向) (默許為此效果) * @"pageCurl" 向上翻1頁 * @"pageUnCurl" 向下翻1頁 * @"suckEffect" 收縮效果,類似系統最小化窗口時的奇異效果(不支持過渡方向) * @"rippleEffect" 滴水效果,(不支持過渡方向) * @"oglFlip" 上下左右翻轉效果 * @"rotate" 旋轉效果 * @"push" * @"cameraIrisHollowOpen" 相機鏡頭打開效果(不支持過渡方向) * @"cameraIrisHollowClose" 相機鏡頭關上效果(不支持過渡方向) */ //創建過渡動畫對象 CATransition *transition = [CATransition animation]; //配置動畫過渡的樣式 transition.type = @"cameraIrisHollowClose"; //將過渡動畫添加到layer上 [self.view.layer addAnimation:transition forKey:nil]; }


//CAAinmationGroup 分組動畫

- (void)handleAnimatonGroup{ //1.創建第1個關鍵幀動畫,給熱氣球1個運動軌跡 CAKeyframeAnimation *keyframePath = [CAKeyframeAnimation animationWithKeyPath:@"position"]; //貝塞爾曲線 //1.指定貝塞爾曲線的半徑 CGFloat radius = [UIScreen mainScreen].bounds.size.height / 2.0; //01:圓心 //02:半徑 //03:開始的角度 //04:結束的角度 //05:旋轉方向 (YES表示順時針 NO表示逆時針) UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(0, radius) radius:radius startAngle:-M_PI_2 endAngle:M_PI_2 clockwise:YES]; //將貝塞爾曲線作為運動軌跡 keyframePath.path = path.CGPath; //2.創建第2組關鍵幀動畫,讓熱氣球在運動的時候 由小--->大--->小 ; CAKeyframeAnimation *keyFrameScale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"]; //通過1組數據修改熱氣球的大小 keyFrameScale.values = @[@1.0,@1.2,@1.4,@1.6,@1.8,@1.6,@1.4,@1.2,@1.0]; //創建動畫分組對象 CAAnimationGroup *group = [CAAnimationGroup animation]; //將兩個動畫效果添加到分組動畫中 group.animations = @[keyframePath,keyFrameScale]; group.duration = 8; group.repeatCount = 1000; [self.balloon.layer addAnimation:group forKey:nil]; }


終究效果:


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久色亚洲 | 目韩一区二区三区系列片丶 | 亚洲国产精品a一区二区三区 | 免费男女视频 | 国产专区一va亚洲v天堂 | 最近最新中文字幕免费的一页 | 国产成人免费手机在线观看视频 | 亚洲成a人v天堂网 | 欧美激情一区二区三区四区 | 亚洲精品久久久久久久网站 | 中文字幕在线永久在线视频2020 | 午夜爱爱网 | 国产综合视频在线观看 | 欧美日韩亚洲天堂 | 国产综合网站 | 夜夜嗨视频网 | 亚洲精品一区二区三区在线看 | 一本大道香蕉中文日本不卡高清二区 | 操色网| 亚洲欧美日产综合一区二区三区 | 欧美日韩亚洲高清不卡一区二区三区 | 黑人极品巨大videoshd | 国产精品久久久久久久久久妇女 | www.日本精品 | 尤物视频网在线观看 | 噜噜噜在线观看播放视频 | 91久久精品一区二区 | 精品一区二区三区中文字幕 | 久爱精品| 男人和女人全黄一级毛片 | 亚洲成人小视频 | 97骚碰| 国产91精品久久久久久 | 国产在线播放成人免费 | 国产一区二区久久 | 日本夜免费视频视频大片 | 国产日产欧美一区二区三区 | 91av成年影院在线播放 | 亚洲无限乱码一二三四区 | 欧美精品福利视频 | 国产亚洲欧洲国产综合一区 |