動畫在UI交互中是一種增強用戶體驗的利器,目前看到幾乎每一個移動App都會使用到各種動畫效果。

公司主營業(yè)務(wù):網(wǎng)站建設(shè)、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出錯那免費做網(wǎng)站回饋大家。
在IOS開發(fā)中實現(xiàn)動畫效果通常有三種方式。
可以用來做什么呢:
設(shè)置UIView的屬性:例如
frame
bounds
center
transform
alpha
backgroundColor
contentStretch
看一下實例:
我們可以看到self.greenView通過UIView Animation動畫將某些屬性進行了改變。
現(xiàn)在我們適當?shù)募尤胍恍﹦赢媹?zhí)行的方式【options】
在開發(fā)中可以添加特定的options滿足不同的動畫需要。
彈簧效果:
CABasicAnimation 為layer屬性提供了基礎(chǔ)的幀動畫能力,創(chuàng)建一個CABasicAnimation的實例,使用繼承自CAPropertyAnimation的animationWithKeyPath:方法,來指定要添加動畫的layer屬性的keypath
讓一個view向左平移,在x方向上從屏幕x中間線型移動到左邊消失,耗時1.5秒的動畫
KeyPath的改變動畫的效果就不一樣,開發(fā)中改變KeyPath的屬性可以實現(xiàn)大多數(shù)我們需要的動畫執(zhí)行的效果
用CABasicAnimation執(zhí)行動畫,在動畫結(jié)束后會回歸動畫開始前的狀態(tài)。想要解決的話,必須設(shè)置“removedOnCompletion”和“fillMode”這兩個屬性。
由于在開發(fā)過程中光是CABasicAnimation的fromValue、toValue起點和終點設(shè)置是無法滿足我們希望在動畫中途進行更多的變化的需求,所以我們需要認識一下CAKeyframeAnimation
從上面的繼承圖我們看出CAKeyframeAnimation 比CABasicAnimation多了更多的可設(shè)置屬性
關(guān)鍵幀動畫其實通過一組動畫類型的值(或者一個指定的路徑)和這些值對應(yīng)的時間節(jié)點以及各時間節(jié)點的過渡方式來控制顯示的動畫。關(guān)鍵幀動畫可以通過path屬性和values屬性來設(shè)置動畫的關(guān)鍵幀。
可以保存一組動畫CAKeyframeAnimation、CABasicAnimation對象,將CAAnimationGroup對象加入圖層后,組中所有動畫對象可以同時并發(fā)運行。
注意:默認情況下,一組動畫對象是同時運行的,也可以通過設(shè)置單個動畫對象的beginTime屬性來更改動畫的開始時間,單個動畫的執(zhí)行效果可以與動畫組執(zhí)行效果屬性分開設(shè)定,根據(jù)需要調(diào)整改變。
ios核心動畫有6種:CABasicAnimation ,CAKeyframeAnimation ,CATransition ,CASpringAnimation ,CAAnimationGroup ,CATransaction。
復(fù)雜的動畫需要以上一種或幾種方式相互組合一下才能實現(xiàn)。
簡單的ui動畫,就用系統(tǒng) 寫好的UIView的動畫就可以了。
備注:你問題描述過于簡單,我只能從原理上說一下。有問題可以追問
預(yù)備知識
iOS處理屏幕上的觸摸動作,主要涉及到以下幾個方法:
復(fù)制代碼 代碼如下:
touchesBegan:withEvent: //觸摸屏幕的最開始被調(diào)用
touchesMoved:withEvent: //移動過程中被調(diào)用
touchesEnded:withEvent: //動作結(jié)束時被調(diào)用
touchesCancelled:WithEvent:
從方法的命名可以清晰的看出該方法何時被調(diào)用,最后一個比較特殊。touchesCancelled:WithEvent:在Cocoa Touch必須響應(yīng)持續(xù)觸摸事件的系統(tǒng)中斷時調(diào)用。
我們只要重寫這些方法,來作我們想要作的`事情就可以了。
如何實現(xiàn)拖動視圖?
1.設(shè)置userInteractionEnabled屬性為YES,允許用戶交互。
2.在觸摸動作開始時記錄起始點。
3.在移動過程中,計算當前位置坐標與起始點的差值,即偏移量,并且移動視圖中心點至偏移量大小的地方。
4.分別限制x坐標、與y坐標,保證用戶不可將視圖托出屏幕
備注:分別限制x坐標與y坐標的原因是,即使向右拖動不了了,仍需保證可以向下拖動。
其實,功能比較簡單,就是iOS手勢動畫中的拖動。來看一下基本的寫法:
1.注冊拖動動畫
復(fù)制代碼 代碼如下:
UIPanGestureRecognizer * panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self
action:@selector(doHandlePanAction:)];
[self.vLight addGestureRecognizer:panGestureRecognizer];
注:vLight就是要加入拖動的View子類。
2.拖動處理函數(shù)
復(fù)制代碼 代碼如下:
- (void) doHandlePanAction:(UIPanGestureRecognizer *)paramSender{
CGPoint point = [paramSender translationInView:self.view];
NSLog(@"X:%f;Y:%f",point.x,point.y);
paramSender.view.center = CGPointMake(paramSender.view.center.x + point.x, paramSender.view.center.y + point.y);
[paramSender setTranslation:CGPointMake(0, 0) inView:self.view];
}
實現(xiàn)代碼
以子類化UIImageView為例
復(fù)制代碼 代碼如下:
#import
@interface GragView : UIImageView
{
CGPoint startPoint;
}
@end
#import "GragView.h"
@implementation GragView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
//允許用戶交互
self.userInteractionEnabled = YES;
}
return self;
}
- (id)initWithImage:(UIImage *)image
{
self = [super initWithImage:image];
if (self) {
//允許用戶交互
self.userInteractionEnabled = YES;
}
return self;
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//保存觸摸起始點位置
CGPoint point = [[touches anyObject] locationInView:self];
startPoint = point;
//該view置于最前
[[self superview] bringSubviewToFront:self];
}
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
//計算位移=當前位置-起始位置
CGPoint point = [[touches anyObject] locationInView:self];
float dx = point.x - startPoint.x;
float dy = point.y - startPoint.y;
//計算移動后的view中心點
CGPoint newcenter = CGPointMake(self.center.x + dx, self.center.y + dy);
/* 限制用戶不可將視圖托出屏幕 */
float halfx = CGRectGetMidX(self.bounds);
//x坐標左邊界
newcenter.x = MAX(halfx, newcenter.x);
//x坐標右邊界
newcenter.x = MIN(self.superview.bounds.size.width - halfx, newcenter.x);
//y坐標同理
float halfy = CGRectGetMidY(self.bounds);
newcenter.y = MAX(halfy, newcenter.y);
newcenter.y = MIN(self.superview.bounds.size.height - halfy, newcenter.y);
//移動view
self.center = newcenter;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
對于大多數(shù)動畫,您可以只需更改視圖內(nèi)的屬性 UIView 動畫塊。UIView類的列出文檔的屬性進行動畫處理。
[UIView animateWithDuration:0.5f animations:^{
aView.frame = CGRectOffset(aView.frame, 0, 250);
}];
這里是一個示例項目演示如何將一個按鈕被按下時觸發(fā)動畫。你可以把許多其他地方,所以有不是一個好回答您的問題在哪里,除非你給你想要的更多細節(jié)將代碼放入此動畫代碼。
你采取的辦法進行動畫處理 UIImageView 。從來沒有過這一點,但我的理解是,就像制作 GIF 動畫。像移動視圖或褪色他們出去的事情,你就會想要使用以上所示的動畫塊方法。
使用CABAsicAnimation來實現(xiàn)動畫的放縮和旋轉(zhuǎn)是比較常用的,這篇主要介紹CABasicAnimation實現(xiàn)簡單的動畫效果
最終的效果圖為:
Demo地址
對應(yīng)的實現(xiàn)文件是SecondViewController
首先,我們先定義一個UIView以及三個button按鈕,分別對應(yīng)平移、放大和旋轉(zhuǎn)
在.h文件中定義相應(yīng)的屬性
之后,在.m文件中實現(xiàn)相應(yīng)的懶加載
將UIView以及button添加到界面上
之后,我們先來實現(xiàn)平移動畫,實現(xiàn)下面的方法
這里面遇到挺多坑的,下面逐條說明一下
接下倆,我們類似添加相應(yīng)的放大和旋轉(zhuǎn)的動畫效果
這樣,我們就完成了CABasicAnimation實現(xiàn)平移、放大和旋轉(zhuǎn)的動畫效果
這種動畫效果使用挺多的
另外,我們閱讀蘋果開發(fā)文檔時,我們可以看到協(xié)議CAAnimationDelegate,通過這個協(xié)議我們可以觀察動畫的開始和結(jié)束。
在平移動畫中,讓CABasicAnimation遵守這個協(xié)議
實現(xiàn)相應(yīng)的協(xié)議方法
比較重要的是,我們通過協(xié)議方法可以判斷動畫是否正常完成還是被打斷,這個我以前就碰到過動畫過程被UITableView 的reloadData打斷,導致動畫表現(xiàn)異常,具體可以看下這篇文章
CAnimationGroup動畫執(zhí)行時間比duration小
)
最終效果圖為:
Demo地址
我寫的同一系列的其他文章
iOS開發(fā)中動畫效果的探究(一)
iOS動畫效果的探究二:UIView Animation實現(xiàn)動畫
iOS動畫效果三:CABAsicAnimation實現(xiàn)平移、旋轉(zhuǎn)和放大
ios動畫效果四:使用Pop框架實現(xiàn)彈簧效果
iOS動畫效果五:CABasicAnimation實現(xiàn)繞定點旋轉(zhuǎn)的效果 ]
iOS動畫效果六:實現(xiàn)自定義的push轉(zhuǎn)場動畫
iOS動畫效果七:實現(xiàn)自定義present轉(zhuǎn)場動畫效果
iOS動畫效果八:實現(xiàn)類似系統(tǒng)的測滑返回效果
本文名稱:ios開發(fā)移動動畫,iosapp啟動動畫
文章地址:http://chinadenli.net/article43/dsgiehs.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、App開發(fā)、小程序開發(fā)、App設(shè)計、Google、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)