IOS之UIKit_Day19

Day19html

回顧:app

1. UIView的內部佈局函數

          VC能夠對直接子視圖佈局,可是不能對視圖的內部直接佈局,因此view必須就有自身 佈局的能,經過重寫UIView的LayoutSubView方法實現當須要佈局的時候,方法執行的順序oop

a.VC的viewWillLayoutSubView佈局

b.View的layoutSubView動畫

d.VC的ViewDidLayoutSubViewspa

2. Autoresizing佈局orm

          利用等比變換的原則,保持視圖與父視圖的變換比率相同,使用簡單,可是使用的效果有限,有時還須要結合手寫代碼結合實現佈局。htm

3 AutoLayout自動佈局對象

          理念:使用「約束」描述位置,具體的座標有系統根據約束計算出來

          實現:

                   方法一:在storyboard中利用配置項

                   方法二:使用代碼的方式建立約束

 

 

今天:

1.Auto Layout代碼建立約束

          step1:建立約束對象

                   NSLayoutConstraint(API )

          step2:: 將約束添加到父視圖中

          方法一:使用萬能公式:

      + (id)constraintWithItem:(id)view1

                                                          attribute:(NSLayoutAttribute)attr1

                                                          relatedBy:(NSLayoutRelation)relation

                                    toItem:(id)view2

                                           attribute:(NSLayoutAttribute)attr2

                                    multiplier:(CGFloat)multiplier

                                                constant:(CGFloat)c

                   萬能公式:"view1.attr1 <relation> view2.attr2 * multiplier + constant".

                                      如button.left=self.view.left*0+20;

                                       button.right=self.view.width*1+(-20);       

          使用注意事項:translateAutoresizingToConstraints這個屬性默認值是YES,這個屬性表明將視圖默認自帶的Autoresizing特性是是否自動轉換爲對應的約束,既然使用代碼來建立約束,那麼就不要讓系統自帶的轉換過來的約束影響添加的自定義約束,因此該屬性要設置爲NO 爲了保證效果,能夠將視圖以及視圖的父視圖的該屬性設置爲NO便可。

          建立約束對象之後  必定要加到父視圖當中

          方法二:一次性建立多個約束,使用VFL(Visual Format Language

          + (NSArray *)constraintsWithVisualFormat:(NSString *)format
            options:(NSLayoutFormatOptions)opts
            metrics:(NSDictionary *)metrics
                           views:(NSDictionary *)views

          metrics參數

                    用於指定VFL字符串中能夠替換的值,是一個字典類型

                    如:NSDictionary *metrics = @{@"left":@20,@"space":@10,@"right":@20};

          NSDictionaryOfVariableBinding()函數

                    NSDictionary *dictionary = NSDictionaryOfVariableBindings(b1,b2,b3);

                    生成的字典以下:

                    @{@"b1":b1,@"b2":b2,@"b3":b3}

 

                   特色:功能強大

  1.4 如何寫VFL字符串

          |  表明倒父視圖邊界的距離

          V: | 垂直方向的高度距離上邊界

          []:表明子視圖(控件)

     ():表明一個條件(==  >= <=)==時能夠省

          —表明的是間距  默認值是8

          —XXX—表明間距是多少

如:    |-20-[button1]-10-[button2(button1)-10-[button3(button1)]-20-|

          V:|-20-[button1]

 

2. 動畫(Animation) 

          2.1 是什麼?

          「幀動畫」:一幀是一張靜態你的圖片,通常狀況下,一秒達到25幀的時候,人眼就分不清楚圖片的切換過程了,就產生了連續的效果。

          2.2 IOS中的動畫

                   UIImage類:自帶一些方法,能夠作簡單的動畫

                   NSTimer類:間隔指定的時間,產生切換的效果

                   UIView類:自己提供的功能

                            底層的core Animation提供了支持動畫的底層屬性

                   在IOS7中增長了一些動畫功能

                   UIKit Dynamic 動力

                   Motion Effects 特效

                   Sprite Kit(corde 2D引擎)

 

3. UIImage類動畫:

          //durantion 播放一組圖片用的時間

UIImage *image = [UIImage animatedImageNamed:@"ship-anim" duration:1*5/30];

    self.imageView.image = image;

 

4. NSTimer

方法一:定時器建立後就會自動啓動

               self.timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doSomething:) userInfo:nil repeats:YES];

方法二:定時器建立以後,就須要代碼啓動

               self.timer=[NSTimer timerWithTimeInterval:1 target:self    selector:@selector(doSomething:) userInfo:nil repeats:YES];

    //啓動代碼

             [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSDefaultRunLoopMode];

          關閉定時器: [self.timer invalidate];

 

 勻速運動

          當前值=開始值+當前幀數*(結束值-開始值)/(幀率*動畫時長)

          這一個值能夠是center  transform frame alpha

 變速運動:

          公式:當前值=上一次的值+(目標值-上一次值)*漸進因子

5. UIView 動畫:真正的動畫有專門的API

          5.1 是什麼?

          有UIKit專門製做的動畫API 這些API的底層對Core Animation的封裝 既能夠實現動畫,不該再計算每一幀來實現動畫的效果

          5.2 製做動畫的步驟:

          step1:設置須要動畫視圖的初始值

          step2:給UIView類發消息 告訴UIView類須要什麼樣的動畫

          step3:將動畫結束的狀態寫入到一個Bloack

          5.3 動畫的高級選項:

          先慢後快再慢

                   UIViewAnimationOptionCurveEaseInOut 

          愈來愈快         

           UIViewAnimationOptionCurveEaseIn 

      愈來愈慢            

           UIViewAnimationOptionCurveEaseOut 

     勻速           

           UIViewAnimationOptionCurveLinear

     動畫重複

           UIViewAnimationOptionRepeat 

     反着執行動畫,要配合Repeat選項                 

           UIViewAnimationOptionAutoreverse

相關文章
相關標籤/搜索