ios 動畫效果

來源:互聯網
上載者:User

一、使用NSTimer實現動畫

1.建立empty AppLication,添加HomeViewController頁面, iphone.png圖片

2.在 HomeViewController.xib中添加Image View,並調整其大小;再添加一個Slider控制項

 

3.HomeViewController.h代碼:

 #import <UIKit/UIKit.h>

@interface HomeViewController : UIViewController{    CGPoint delta;//座標變化量    NSTimer *timer;    CGSize picSize;//圖片大小    }@property (retain, nonatomic) IBOutlet UIImageView *imageView;@property (retain, nonatomic) IBOutlet UISlider *slider;- (IBAction)sliderChanged:(id)sender;@end

HomeViewController.m代碼:

 #import "HomeViewController.h"

@interface HomeViewController ()@end@implementation HomeViewController

 

@synthesize imageView;@synthesize slider;- (void)move{    imageView.center = CGPointMake(imageView.center.x + delta.x,                                    imageView.center.y + delta.y);        if (imageView.center.x > self.view.bounds.size.width - picSize.width / 2 ||         imageView.center.x < picSize.width / 2) {        delta.x = -delta.x;    }        if (imageView.center.y >self.view.bounds.size.height - picSize.height / 2 ||        imageView.center.y < picSize.height / 2) {        delta.y = -delta.y;    }    /*我們不斷地改變imaageView的center座標,橫向和縱向的調整數值為delta的x和y值,當檢測到imageView的位置     超過或小於螢幕的寬度或者高度的時候,我們改變其運動的方向*/}- (void)viewDidLoad{    picSize = imageView.bounds.size;    delta = CGPointMake(8.0, 4.0);    timer = [NSTimer scheduledTimerWithTimeInterval:slider.value                                             target:self                                            selector:@selector(move)                                            userInfo:nil                                             repeats:YES];        [super viewDidLoad];}- (void)dealloc {

 

    [timer invalidate];    [imageView release];    [slider release];    [super dealloc];}

 

- (IBAction)sliderChanged:(id)sender {    [timer invalidate];    timer = [NSTimer scheduledTimerWithTimeInterval:slider.value                                             target:self                                            selector:@selector(move)                                            userInfo:nil                                            repeats:YES];}@end

因為圖片是靜態所以看不到效果,這個很好玩,iphone圖片會在手機內四周不同位置移動,速度可以調節 

                                                        二、視覺效果動畫 

讓動畫產生平滑的感覺:

 

修改move方法

- (void)move{        [UIView beginAnimations:@"myAnimation" context:nil];        [UIView setAnimationDuration:slider.value];//動畫執行時間        [UIView setAnimationCurve:UIViewAnimationCurveLinear];//設定動畫的執行速度    /*setAnimationCurve有四種常量:            UIViewAnimationCurveLinear 在執行動畫的時間內,速度始終保持如一。            UIViewAnimationCurveEaseInOut 執行動畫的時候,速度開始慢,然後加速,結束時再次變慢            UIViewAnimationCurveEaseIn 速度開始慢,然後逐漸加速直到結束            UIViewAnimationCurveEaseOut 速度開始快,然後逐漸減速直到結束*/    imageView.center = CGPointMake(imageView.center.x + delta.x,                                    imageView.center.y + delta.y);        [UIView commitAnimations];//動畫塊結束時調用,此時imageView從一個點移動到另一個點就會非常平滑,而不是讓人感覺從一個點跳到了另一個點        if (imageView.center.x > self.view.bounds.size.width - picSize.width / 2 ||         imageView.center.x < picSize.width / 2) {        delta.x = -delta.x;    }        if (imageView.center.y >self.view.bounds.size.height - picSize.height / 2 ||        imageView.center.y < picSize.height / 2) {        delta.y = -delta.y;    }    /*我們不斷地改變imaageView的center座標,橫向和縱向的調整數值為delta的x和y值,當檢測到imageView的位置     超過或小於螢幕的寬度或者高度的時候,我們改變其運動的方向*/}

三、視圖變形

    雖然可以使用NSTimer達到view位置移動的動畫效果,但是也可以使用ios sdk提供的另外一種技術--Transforms(定義在Core Graphics架構中)來實現同樣的效果,並且實現更多功能。

    包括:Translation, 移動view的原點座標到指定的位置;Rotation, 旋轉view到一個指定的角度;Scaling, 縮放view到一個指定的寬高比例。

 

1、位移動畫

修改HomeViewController.h

#import <UIKit/UIKit.h>@interface HomeViewController : UIViewController{    CGPoint delta;    NSTimer *timer;    CGSize picSize;    CGPoint translation;    }@property (retain, nonatomic) IBOutlet UIImageView *imageView;@property (retain, nonatomic) IBOutlet UISlider *slider;- (IBAction)sliderChanged:(id)sender;

@end 

修改HomeViewController.m 的move方法和viewDidLoad方法

- (void)move{        imageView.transform = CGAffineTransformMakeTranslation(translation.x, translation.y);//移動view到指定的位置    translation.x += delta.x;    translation.y += delta.y;        if (imageView.center.x + translation.x > self.view.bounds.size.width - picSize.width / 2 ||        imageView.center.x + translation.x < picSize.width / 2) {        delta.x = -delta.x;    }        if (imageView.center.y + translation.y > self.view.bounds.size.height - picSize.height / 2 ||        imageView.center.y + translation.y < picSize.height / 2) {        delta.y = -delta.y;    }}

 - (void)viewDidLoad

{    picSize = imageView.bounds.size;    delta = CGPointMake(8.0, 4.0);        translation = CGPointMake(0.0, 0.0);        timer = [NSTimer scheduledTimerWithTimeInterval:slider.value                                             target:self                                            selector:@selector(move)                                            userInfo:nil                                             repeats:YES];        [super viewDidLoad];}

 

2、旋轉動畫

修改HomeViewController.h

#import <UIKit/UIKit.h>@interface HomeViewController : UIViewController{        CGPoint delta;    NSTimer *timer;    CGSize picSize;    CGPoint translation;    float angle;//旋轉角度    }@property (retain, nonatomic) IBOutlet UIImageView *imageView;@property (retain, nonatomic) IBOutlet UISlider *slider;- (IBAction)sliderChanged:(id)sender;

@end 

修改HomeViewController.m 的move方法和viewDidLoad方法

- (void)move{    imageView.transform = CGAffineTransformMakeRotation(angle);    angle += 0.02;    /*判斷角度是否大於360º,如果大於2π(3.14159 * 2 = 6.28318),則讓angle為0*/    if (angle > 6.2832) {        angle = 0;    }}

 - (void)viewDidLoad

{    picSize = imageView.bounds.size;    delta = CGPointMake(8.0, 4.0);

 

    translation = CGPointMake(0.0, 0.0);

    angle= 0; 

    timer = [NSTimer scheduledTimerWithTimeInterval:slider.value                                             target:self                                            selector:@selector(move)                                            userInfo:nil                                             repeats:YES];        [super viewDidLoad];}

  

3、縮放動畫 

 只需要修改slider的事件sliderChanged 即可

- (IBAction)sliderChanged:(id)sender {    imageView.transform = CGAffineTransformMakeScale(slider.value, slider.value);//縮放

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.