Rumah hujung hadapan web html tutorial iOS中Animation 动画 UI_22_html/css_WEB-ITnose

iOS中Animation 动画 UI_22_html/css_WEB-ITnose

Jun 24, 2016 am 11:34 AM

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

2.UIView能够在屏幕的显示是因为在创建它的时候内部自动添加一个CALayer图层,通过这个图层在屏幕上显示的时候会调用一个drawRect: 的方法,完成绘图,才能在屏幕上显示

3.CALayer 本身就具有显示功能,但是它不能响应用户的交互事件,如果只是单纯的显示一个图形,此时你可以使用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<span style="font-family: 'STHeiti Light';">@implementation ViewController</span>
Salin selepas log masuk
- (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;}
Salin selepas log masuk

//给TF创建一个类目:

UITextField+Shake.h#import <uikit>@interface UITextField (Shake)- (void)shake;@endUITextField+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</uikit>
Salin selepas log masuk


开始动画按钮点击事件

- (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];    }
Salin selepas log masuk

//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    // 之前形变量    //旋转的角度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];}
Salin selepas log masuk

//恢复到视图之前的状态

- (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 的第一种形式    //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的第二种形式    [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的第三种形式    //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的第四种形式    //参数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;            }];}
Salin selepas log masuk

//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];    }
Salin selepas log masuk

//CALayer动画,修改layer层的属性做动画并没有真实的作用到这个视图上,动画知识一种假象

- (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;            //视图一创建出来的时候  锚点 基准点  中心点三个点是重合的    //锚点 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);}
Salin selepas log masuk

//CALayer 的动画基类:CAAnimation

//CABasicAnimation  基础动画

- (void)handleBasicAnimation{    //CA动画是根据KVC的原理,就修改layer的属性,以达到做动画的效果    CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"position.x"];        basic.fromValue = @(-80);    basic.toValue = @(400);    //设置动画持续的时间    basic.duration = 5.0;    //设置动画重复的次数    basic.repeatCount = 1000;    [self.cloud.layer addAnimation:basic forKey:nil];}
Salin selepas log masuk

//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);        //把一组要播放的动画需求的数值,按顺序放到数组中,此时动画执行的效果,就会按照数组中数据的顺序发生变化;    //转化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];}
Salin selepas log masuk

//CATransition CALayer 的过度动画

- (void)handleLayerCATransactionAnimation{     /*          各种动画效果  其中除了'fade', `moveIn', `push' , `reveal' ,其他属于似有的API(我是这么认为的,可以点进去看下注释).          *  ↑↑↑上面四个可以分别使用'kCATransitionFade', 'kCATransitionMoveIn', 'kCATransitionPush', 'kCATransitionReveal'来调用.          *  @"cube"                     立方体翻滚效果          *  @"moveIn"                   新视图移到旧视图上面          *  @"reveal"                   显露效果(将旧视图移开,显示下面的新视图)          *  @"fade"                     交叉淡化过渡(不支持过渡方向)             (默认为此效果)          *  @"pageCurl"                 向上翻一页          *  @"pageUnCurl"               向下翻一页          *  @"suckEffect"               收缩效果,类似系统最小化窗口时的神奇效果(不支持过渡方向)          *  @"rippleEffect"             滴水效果,(不支持过渡方向)          *  @"oglFlip"                  上下左右翻转效果          *  @"rotate"                   旋转效果          *  @"push"          *  @"cameraIrisHollowOpen"     相机镜头打开效果(不支持过渡方向)          *  @"cameraIrisHollowClose"    相机镜头关上效果(不支持过渡方向)          */        //创建过渡动画对象    CATransition *transition = [CATransition animation];    //配置动画过渡的样式    transition.type = @"cameraIrisHollowClose";    //将过渡动画添加到layer上    [self.view.layer  addAnimation:transition forKey:nil];    }
Salin selepas log masuk

//CAAinmationGroup 分组动画

- (void)handleAnimatonGroup{    //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.创建第二组关键帧动画,让热气球在运动的时候  由小--->大--->小   ;    CAKeyframeAnimation *keyFrameScale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];    //通过一组数据修改热气球的大小    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];    }
Salin selepas log masuk

最终效果:



版权声明:本文为博主原创文章,未经博主允许不得转载。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Adakah HTML mudah belajar untuk pemula? Adakah HTML mudah belajar untuk pemula? Apr 07, 2025 am 12:11 AM

HTML sesuai untuk pemula kerana mudah dan mudah dipelajari dan dapat melihat hasilnya dengan cepat. 1) Keluk pembelajaran HTML adalah lancar dan mudah dimulakan. 2) Hanya menguasai tag asas untuk mula membuat laman web. 3) Fleksibiliti yang tinggi dan boleh digunakan dalam kombinasi dengan CSS dan JavaScript. 4) Sumber pembelajaran yang kaya dan alat moden menyokong proses pembelajaran.

Peranan HTML, CSS, dan JavaScript: Tanggungjawab Teras Peranan HTML, CSS, dan JavaScript: Tanggungjawab Teras Apr 08, 2025 pm 07:05 PM

HTML mentakrifkan struktur web, CSS bertanggungjawab untuk gaya dan susun atur, dan JavaScript memberikan interaksi dinamik. Ketiga melaksanakan tugas mereka dalam pembangunan web dan bersama -sama membina laman web yang berwarna -warni.

Apakah contoh tag permulaan dalam html? Apakah contoh tag permulaan dalam html? Apr 06, 2025 am 12:04 AM

Anexampleofastartartingtaginhtmlis, yangbeginsaparagraph.startingtagsareessentialinhtmlasttheyinitiateelements, definetheirtypes, andarecrucialforstructuringwebpagesandconstructionthedom.

Memahami HTML, CSS, dan JavaScript: Panduan Pemula Memahami HTML, CSS, dan JavaScript: Panduan Pemula Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesOnhtml, CSS, andjavascript: 1) HtmlStructuresContent, 2) CSSStylesit, dan3) JavaScriptaddsInteractivity, Formingthebasisofmodernwebexperiences.

Bagaimana untuk melaksanakan susun atur penyesuaian kedudukan paksi y dalam anotasi web? Bagaimana untuk melaksanakan susun atur penyesuaian kedudukan paksi y dalam anotasi web? Apr 04, 2025 pm 11:30 PM

Algoritma Adaptif Kedudukan Y-Axis untuk Fungsi Anotasi Web Artikel ini akan meneroka cara melaksanakan fungsi anotasi yang serupa dengan dokumen perkataan, terutama bagaimana menangani selang antara anotasi ...

GITEE PAGES PENYEDIAAN LAMAN WEB STATIC Gagal: Bagaimana menyelesaikan masalah dan menyelesaikan kesilapan fail tunggal 404? GITEE PAGES PENYEDIAAN LAMAN WEB STATIC Gagal: Bagaimana menyelesaikan masalah dan menyelesaikan kesilapan fail tunggal 404? Apr 04, 2025 pm 11:54 PM

Giteepages Statik Laman Web Penggunaan Gagal: 404 Penyelesaian Masalah dan Resolusi Ralat Semasa Menggunakan Gitee ...

HTML, CSS, dan JavaScript: Alat penting untuk pemaju web HTML, CSS, dan JavaScript: Alat penting untuk pemaju web Apr 09, 2025 am 12:12 AM

HTML, CSS dan JavaScript adalah tiga tiang pembangunan web. 1. HTML mentakrifkan struktur laman web dan menggunakan tag seperti, dan sebagainya. 2. CSS mengawal gaya laman web, menggunakan pemilih dan atribut seperti warna, saiz font, dan lain-lain.

Bagaimana menggunakan CSS3 dan JavaScript untuk mencapai kesan penyebaran dan membesarkan gambar -gambar sekitarnya selepas mengklik? Bagaimana menggunakan CSS3 dan JavaScript untuk mencapai kesan penyebaran dan membesarkan gambar -gambar sekitarnya selepas mengklik? Apr 05, 2025 am 06:15 AM

Untuk mencapai kesan penyebaran dan membesarkan imej sekitarnya selepas mengklik pada imej, banyak reka bentuk web perlu mencapai kesan interaktif: klik pada imej tertentu untuk membuat sekitar ...

See all articles