藍懿iOS 技術內容和心得 12.24

及新內容:

有三種bar:

navigationBar、tabbar、to'olbar

有兩種item

UIBarButtonItem(navigationBar和toolbar)、UITabbarItem(tabbar)

//默認的NavigationBar是半透明的 此時viewController的View y軸是從0 開始的,設置了圖片之後就會變成不透明  y軸是從 64(bar的高度44,狀態欄20)開始的

SEL 可以把方法變成一個變量  當做參數進行傳遞  

使用SEL可以調用私有方法

block 需要了解 如何聲明  如何賦值(實現)  如何調用

返回值類型 (^名字)(參數類型 參數名稱);

賦值格式:

名字 = ^(參數類型 參數名字){如果有返回 加 return};

Class s = NSClassFromString(@"Person"); 獲取某個名稱的類 

在類的靜態方法(類方法)中 self代表當前類的類型 

在實例方法(對象方法)中 self代表當前類創建出來的對象

1.概述

UIKit直接將動畫集成到UIView類中,實現簡單動畫的創建過程。UIView類定義了幾個內在支持動畫的屬性聲明,當這些屬性發生改變時,視圖爲其變化過程提供內建的動畫支持。

執行動畫所需要的工作由UIView類自動完成,但仍要在希望執行動畫時通知視圖,爲此需要將改變屬性的代碼包裝到一個代碼塊中。

2.UIView動畫具體創建方法

- (void)buttonPressed{//  交換本視圖控制器中2個view位置    [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1];    //UIView開始動畫,第一個參數是動畫的標識,第二個參數附加的應用程序信息用來傳遞給動畫代理消息    [UIView beginAnimations:@"View Flip" context:nil];    //動畫持續時間    [UIView setAnimationDuration:1.25];    //設置動畫的回調函數,設置後可以使用回調方法    [UIView setAnimationDelegate:self];    //設置動畫曲線,控制動畫速度    [UIView  setAnimationCurve: UIViewAnimationCurveEaseInOut];    //設置動畫方式,並指出動畫發生的位置    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view  cache:YES];    //提交UIView動畫    [UIView commitAnimations];}- (void)viewDidLoad{    [super viewDidLoad];    //主要功能通過UIView動畫完成2個試圖控制器的切換        self.blueController = [[BlueViewController alloc] initWithNibName:nil bundle:nil];    //設置導航控制器view的大小佔整個屏幕    [self.blueController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width , self.view.frame.size.height)];        self.yellowController = [[YellowController alloc]initWithNibName:nil bundle:nil ];    [self.yellowController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width , self.view.frame.size.height)];    //將2個控制器view插入到目前導航控制器視圖上,yellowController後插入,顯示在最前面    [self.view insertSubview:self.blueController.view atIndex:0];    [self.view insertSubview:self.yellowController.view atIndex:1];    //創建導航控制器右按鈕,按鈕名字叫next    //添加buttonPressed 事件    self.rightBarItem = [[UIBarButtonItem alloc] initWithTitle:@"next" style:UIBarButtonItemStylePlain target:self action:@selector(buttonPressed)];    //將按鈕添加到導航控制器默認右按鈕上    self.navigationItem.rightBarButtonItem = self.rightBarItem;}

有個問題:如果動畫不放在按鈕事件中,直接放到viewDidLoad裏,程序首先執行這個controller,這時動畫是不會顯示的。

原因:出現這個問題是因爲開機時候系統有個動畫,系統動畫和這個動畫重複了。

解決方案:

1。將動畫寫在按鈕事件中

2。利用定時器。

轉:UIView動畫更具體講解;http://wsqwsq000.iteye.com/blog/1189183

areAnimationsEnabled

返回一個布爾值表示動畫是否結束。+ (BOOL)areAnimationsEnabled返回值如果動畫結束返回YES,否則NO。

 

beginAnimations:context:

開始一個動畫塊+ (void)beginAnimations:(NSString *)animationID context:(void *)context參數animationID動畫塊內部應用程序標識用來傳遞給動畫代理消息-這個選擇器運用setAnimationWillStartSelector:和setAnimationDidStopSelector: 方法來設置。context附加的應用程序信息用來傳遞給動畫代理消息-這個選擇器使用setAnimationWillStartSelector: 和setAnimationDidStopSelector: 方法。討論這個值改變是因爲設置了一些需要在動畫塊中產生動畫的屬性。動畫塊可以被嵌套。如果在沒有在動畫塊中調用那麼setAnimation類方法將什麼都不做。使用 beginAnimations:context:來開始一個動畫塊並用commitAnimations類方法來結束一個動畫塊。

commitAnimations

結束一個動畫塊並開始當他在動畫塊外時。+ (void)commitAnimations討論如果當前的動畫塊是最外層的動畫塊,當應用程序返回到循環運行時開始動畫塊。動畫在一個獨立的線程中所有應用程序不會中斷。使用這個方法,多個動畫可以被實現。查看setAnimationBeginsFromCurrentState:來了解如果開始一個動畫當另外一個動畫在播放的時候。

layerClass

返回類用來創建這一個本類的layer實例對象。+ (Class)layerClass返回值一個用來創建視圖layer的類討論重寫子類來指定一個自定義類用來顯示。當在創建視圖layer時候調用。默認的值是CALayer類對象。

setAnimationBeginsFromCurrentState:設置動畫從當前狀態開始播放。+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState參數fromCurrentStateYES如果動畫需要從他們當前狀態開始播放。否則爲NO。討論如果設置爲YES那麼當動畫在運行過程中,當前視圖的位置將會作爲新的動畫的開始狀態。如果設置爲NO,當前動畫結束前新動畫將使用視圖最後狀態的位置作 爲開始狀態。這個方法將不會做任何事情如果動畫沒有運行或者沒有在動畫塊外調用。使用beginAnimations:context:類方法來開始並用 commitAnimations類方法來結束動畫塊。默認值是NO。

setAnimationCurve:設置動畫塊中的動畫屬性變化的曲線。+ (void)setAnimationCurve:(UIViewAnimationCurve)curve討論動畫曲線是動畫運行過程中相對的速度。如果在動畫塊外調用這個方法將會無效。使用 beginAnimations:context:類方法來開始動畫塊並用commitAnimations來結束動畫塊。默認動畫曲線的值是UIViewAnimationCurveEaseInOut。

 

setAnimationDelay:

在動畫塊中設置動畫的延遲屬性(以秒爲單位)+ (void)setAnimationDelay:(NSTimeInterval)delay討論這個方法在動畫塊外調用無效。使用beginAnimations:context: 類方法開始一個動畫塊並用commitAnimations類方法結束動畫塊。默認的動畫延遲是0.0秒。

 

setAnimationDelegate:

設置動畫消息的代理。+ (void)setAnimationDelegate:(id)delegate參數delegate你可以用setAnimationWillStartSelector:和setAnimationDidStopSelector: 方法來設置接收代理消息的對象。討論這個方法在動畫塊外沒有任何效果。使用beginAnimations:context:類方法開始一個動畫塊並用commitAnimations類方法結束一個動畫塊。默認值是nil

 

setAnimationDidStopSelector:

設置消息給動畫代理當動畫停止的時候。+ (void)setAnimationDidStopSelector:(SEL)selector參數selector當動畫結束的時候發送給動畫代理。默認值是NULL。這個選擇者須有下面方法的簽名:animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context。animationID一個應用程序提供的標識符。和傳給beginAnimations:context: 相同的參數。這個參數可以爲空。finished如果動畫在停止前完成那返回YES;否則就是NO。context一個可選的應用程序內容提供者。和beginAnimations:context: 方法相同的參數。可以爲空。討論這個方法在動畫塊外沒有任何效果。使用beginAnimations:context: 類方法來開始一個動畫塊並用commitAnimations類方法結束。默認值是NULL。

 

setAnimationDuration:

設置動畫塊中的動畫持續時間(用秒)+ (void)setAnimationDuration:(NSTimeInterval)duration參數duration一段動畫持續的時間。討論這個方法在動畫塊外沒有效果。使用beginAnimations:context: 類方法來開始一個動畫塊並用commitAnimations類方法來結束一個動畫塊。默認值是0.2。

 

setAnimationRepeatAutoreverses:設置動畫塊中的動畫效果是否自動重複播放。+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses參數repeatAutoreverses如果動畫自動重複就是YES否則就是NO。討論自動重複是當動畫向前播放結束後再重頭開始播放。使用setAnimationRepeatCount: 類方法來指定動畫自動重播的時間。如果重複數爲0或者在動畫塊外那將沒有任何效果。使用beginAnimations:context:類方法來開始一個動畫塊並用commitAnimations方法來結束一個動畫塊。默認值是NO。

 

setAnimationRepeatCount:

設置動畫在動畫模塊中的重複次數+ (void)setAnimationRepeatCount:(float)repeatCount參數repeatCount動畫重複的次數,這個值可以是分數。討論這個屬性在動畫塊外沒有任何作用。使用beginAnimations:context:類方法來開始一個動畫塊並用commitAnimations類方法來結束。默認動畫不循環。

 

setAnimationsEnabled:設置是否激活動畫+ (void)setAnimationsEnabled:(BOOL)enabled參數enabled如果是YES那就激活動畫;否則就是NO討論當動畫參數沒有被激活那麼動畫屬性的改變將被忽略。默認動畫是被激活的。

 

setAnimationStartDate:設置在動畫塊內部動畫屬性改變的開始時間+ (void)setAnimationStartDate:(NSDate *)startTime參數startTime一個開始動畫的時間討論使用beginAnimations:context:類方法來開始一個動畫塊並用commitAnimations類方法來結束動畫塊。默認的開始時間值由CFAbsoluteTimeGetCurrent方法來返回。

 

setAnimationTransition:forView:cache:在動畫塊中爲視圖設置過渡+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache參數transition把一個過渡效果應用到視圖中。可能的值定義在UIViewAnimationTransition中。view需要過渡的視圖對象。cache如果是YES,那麼在開始和結束圖片視圖渲染一次並在動畫中創建幀;否則,視圖將會在每一幀都渲染。例如緩存,你不需要在視圖轉變中不停的更新,你只需要等到轉換完成再去更新視圖。討論如果你想要在轉變過程中改變視圖的外貌。舉個例子,文件從一個視圖到另一個視圖,然後使用一個UIView子類的容器視圖,如下:1.Begin an animation block.2.Set the transition on the container view.3.Remove the subview from the container view.4.Add the new subview to the container view.5.Commit the animation block.1.開始一個動畫塊。 2.在容器視圖中設置轉換。 3.在容器視圖中移除子視圖。 4.在容器視圖中添加子視圖。 5.結束動畫塊。

 

setAnimationWillStartSelector:

當動畫開始時發送一條消息到動畫代理+ (void)setAnimationWillStartSelector:(SEL)selector參數selector在動畫開始前向動畫代理髮送消息。默認值是NULL。這個selector必須由和beginAnimations:context: 方法相同的參數,一個任選的程序標識和內容。這些參數都可以是nil。討論這個方法在動畫塊外沒有任何作用。使用beginAnimations:context:類方法來開始一個動畫塊並用commitAnimations類方法來結束。

學習ios  重要還是要理清楚思路  在做或者看老師代碼的時候 自己多想想爲什麼  不要自己看着就抄       另外還是要推薦一下 藍懿IOS這個培訓機構  和劉國斌老師劉國斌老師還是很有名氣的,聽朋友說劉老師成立了藍懿iOS,,老師講課方式很獨特,能夠儘量讓每個人都能弄明白,有的比較難懂的地方,如果有的地方還是不懂得話,老師會換個其它方法再講解,這對於我們這些學習iOS的同學是非常好的,多種方式的講解會理解得更全面,這個必須得給個贊,嘻嘻,還有就是這裏的學習環境很好,很安靜,可以很安心的學習,安靜的環境是學習的基礎,小班講課,每個班20幾個學生,學習氛圍非常好,每天都學到9點多才離開教室,練習的時間很充裕,而且如果在練習的過程中有什麼困難,隨時可以向老師求助,不像其它機構,通過視頻教學,有的甚至學完之後都看不到講師本人,問點問題都不方便,這就是藍懿與其它機構的區別,相信在劉國斌老師的細心指導下,每個藍懿學員都能找到滿意的工作,加油!

                                                                  寫博客第七十五天;

                                                                              QQ:565803433

發佈了113 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章