UIView實現動畫效果:
UIView類的很多屬性都設計爲動畫,動畫的屬性是指當屬性從一個值變成另外一個值時可以支持動畫,同時通知UIKit需要執行什麼樣類型的動畫,UIView對象支持動畫的屬性有如下幾個:
frame:可以使用該屬性改變尺寸和位置
bounds:改變尺寸
center:改變視圖的位置
alpha:改變視圖的透明度
backgroundColor:改變視圖的背景
contentStretch:改變視圖內容如何拉伸
(1)Core Animation方法
IOS封裝了Core Animation來是實現動畫,Core Animation的最大好處是可以幫助Mac或者iPhone的開發者減少代碼量。因爲如果你想用Core Image或者Open GL實現界面的動畫特效,其實也是可以的,主要是非常麻煩。而用Core Animation可以極大簡化開發難度和減少代碼量,IOS提供的核心動畫編程接口,可以讓編程人員以非常簡單的方式實現炫目流暢的動畫效果
翻轉的動畫
[UIViewbeginAnimations:@"wap view" context:nil]; //開始動畫
[UIViewsetAnimationDuration:1]; //設置時常
[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut]; //設置動畫淡入淡出
[UIViewsetAnimationDelegate:self]; //設置代理
[UIViewsetAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:manImageView cache:YES]; //設置翻轉方向
[UIViewcommitAnimations]; //動畫結束
旋轉動畫
創建一個CGAffineTransform transform對象 CGAffineTransform transform;
transform =CGAffineTransformRotate(manImageView.transform,M_PI/6.0); //設置旋轉度數
[UIViewbeginAnimations:@"rotate" context:nil ]; //動畫開始
[UIViewsetAnimationDuration:2]; //動畫時常
[UIViewsetAnimationDelegate:self]; //添加代理
[manImageViewsetTransform:transform]; //獲取transform的值
[UIViewcommitAnimations]; //關閉動畫
偏移動畫
[UIView beginAnimations:@"move" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self]; //改變它的frame的x,y的值 manImageView.frame=CGRectMake(100,100, 120,100);
[UIView commitAnimations];
翻頁動畫
[UIView beginAnimations:@"curlUp" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//指定動畫曲線類型,該枚舉是默認的,線性的是勻速的
//設置動畫時常 [UIViewsetAnimationDuration:1];
[UIView setAnimationDelegate:self]; //設置翻頁的方向
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUpforView:manImageView cache:YES];
[UIViewcommitAnimations]; //關閉動畫
縮放動畫
CGAffineTransform transform;
transform =CGAffineTransformScale(manImageView.transform,1.2,1.2);
[UIView beginAnimations:@"scale" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];
[UIView commitAnimations];
取反的動畫效果是根據當前的動畫取他的相反的動畫
CGAffineTransform transform;
transform=CGAffineTransformInvert(manImageView.transform);
[UIView beginAnimations:@"Invert" context:nil];
[UIView setAnimationDuration:2];//動畫時常
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];//獲取改變後的view的transform [UIViewcommitAnimations];//關閉動畫
(2)Block方法實現的動畫(即animateWithDuration方法)
[UIViewanimateWithDuration:<#(NSTimeInterval)#>animations:<#^(void)animations#>];
[UIViewanimateWithDuration:<#(NSTimeInterval)#>animations:<#^(void)animations#> completion:<#^(BOOLfinished)completion#>];
[UIView animateWithDuration:<#(NSTimeInterval)#>delay:<#(NSTimeInterval)#> options:<#(UIViewAnimationOptions)#>animations:<#^(void)animations#> completion:<#^(BOOLfinished)completion#>];
l duration爲動畫持續的時間
l animations爲動畫效果的代碼塊
l completion爲動畫執行完畢以後執行的代碼塊
l options爲動畫執行的選項。可以參考這裏
l delay爲動畫開始執行前等待的時間
比如一:從屏幕下部往上漸漸彈出一個圖片
- -(void) fadeIn
- {
- CGRect rect = [[UIScreen mainScreen] bounds];
- self.view.center = CGPointMake(rect.size.width/2, 720);
- [UIView animateWithDuration:0.5f animations:^{
- self.view.center = CGPointMake(rect.size.width/2, 240+10);
- } completion:^(BOOL finished) {
- // [imageView setImageURL:[NSURL URLWithString:imgUrl]];
- }];
- }
- -(void) fadeOut
- {
- CGRect rect = [[UIScreen mainScreen] bounds];
- [UIView animateWithDuration:0.5f animations:^{
- self.view.center = CGPointMake(rect.size.width/2, 720);
- } completion:^(BOOL finished) {
- [imageView cancelImageLoad];
- [imageView release];
- //[imgUrl release];
- // imageView = nil;
- //imgUrl = nil;
- // [self.view removeFromSuperview];
- }];
- }