亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

雜記---不定期更新

2019-11-14 18:18:21
字體:
來源:轉載
供稿:網友

注:再本文中您將可能看到排版混亂,中英文混用,表達不清等問題,敬請見諒。中英文混用是因為我想保留英文的意思,避免錯翻譯(其實是我英文水平不夠根本就不知道什么意思)。

------------------------------------------------------------- 碎 片 知 識 ----------------------------------------------------------------------------

1.data source也是一種特殊的delegate,data source負責傳輸數據給View例如data、at、count等,而delegate負責處理View的did、should、will等問題,View把需要的數據信息或者事件信息傳輸給dalegate,dalegate則負責回復這些信息。

--------------------------------------------------------------- Block -------------------------------------------------------------------------------

1.Block當中不能修改局部變量的值,在block中,局部變量都是只讀的,比如在block外部有一個BOOL value = YES;,如果在block內部修改value的值,這就是非法的,編譯器會報錯。當然,有一種辦法可以進行讀寫,就是在變量前面加上兩個下劃線和block,如:__block BOOL value = YES;,這樣就可以在block當中進行該變量的讀寫了。

int anInteger = 42;void (^testBlock)(void) = ^{    NSLog(@"Integer is: %i", anInteger);};anInteger = 84;testBlock();// 輸出結果為:Integer is: 42// It also means that the block cannot change the value of the original variable// 在block defined的那一刻anInteger的值就已經被捕獲了
輔助理解

原理是如果聲名了__block,編譯器就會生成一段代碼將value從棧(stack)移到堆中(heap),同時編譯器會有一個強指針指向block中的每一個變量,確保它不會在block執行完畢前就離開堆,當執行完block的時候,編譯器將信息拷貝回堆當中,然后再移回棧當中,同時強指針會在block goes out of scope*1之前一直存在。

2.如果block不需要參數,參數的括號可以直接省去,如果返回值再return的時候可以直接看出來,比如return [MyClass isKindOfClass:...];,這種類型的編譯器會自動完成返回值,所以block的返回值類型也可以省去。

--------------------------------------------------------------- 動 畫 --------------------------------------------------------------------------------

1.使用animateWithDuration來執行動畫的時候如果動畫被中途中斷了,比如說將alpha從1.0設置為0,如果執行中途有代碼或者另一個動畫設置了alpha,則Completion的block的參數finished則為NO,如果沒有人中斷完成了動畫,則finished為YES。

2.UIViewAnimationOptions:

  1. BeginFromCurrentState:如果開啟了該選項,如果執行第一個動畫將alpha變為0,在執行到變為0.5的時候(雖然代碼是立即變為0,但是此處為看到的動畫),如果動畫二將alpha變為1,并且開啟了這個選項,則alpha會從0.5開始變為1。如果沒有開啟則會從0開始變為1。
  2. CurveEaseInEaSEOut和CurveEaseIn:如果開啟了該選項,則會在執行動畫的時候使用線性運動(開始慢,中間加速,結束慢)。

3.使用transitionWithView:(UIView *)view              方法來修改整個視圖的狀態。

        duration:(NSTimeIntevel)duration

        options:(UIViewAnimationOptions)options

        animations:(void (^)(void))animations

        completion:(void (^)(BOOL finished))completion;

4.transitionWithView的options:

  1. UIViewAnimationOptionsTransitionFlipFrom{Left, Right, Top, Bottom},代表翻轉整個View(選項是從哪個地方翻轉)。
  2. UIViewAnimationOptionsTransitionCrossDissolve,代表交叉溶解。
  3. UIViewAnimationOptionsTransitionCurl{Up, Down},代表從哪個方向卷起。

5.transitionFromView:(UIView *)fromView            使用toView取代fromView。

        toView:(UIView *)toView

        duration:(NSTimeInteval)duration

        options:(UIViewAnimationOptions)options

        completion:(void (^)(BOOL finished))completion;

--------------------------------------------------------- DynamicAnimator -------------------------------------------------------------------------

1.創建動力動畫的步驟:

  1. 創建一個UIDynamicAnimator對象。
  2. 給它加入UIDynamicBehaviors(gravity, collisions, etc)。
  3. 給UIDynamicBehaviors加入UiDynamicItems。

2.創建UIDynamicAnimator對象的時候直接使用alloc/init是可以的,但是如果作用于一個UIView對象則需要使用alloc/initWithReferenceView:方法來指定頂級視圖。UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:aView];

3.創建UIDynamicBehavior的時候直接使用alloc/init就可以了,然后將其加入UIDynamicAnimator中。UIGravityBehavior *gravity = [[UIGravity Behavior alloc] init];[animator addBehavior:gravity];

4.添加Item:id <UIDynamicItem> item1 = ...;[gravity addItem:item1];基本上90%的item都是UIView。

5.UIDynamicItem協議屬性方法:

  1. @PRoperty (readonly) CGRect bounds;
  2. @property (readwirte) CGPoint center;
  3. @property (readwrite) CGAffineTransform transform;

6.如果要在animator執行動畫的時候修改item的屬性,必須要使用- (void)updateItemUsingCurrentState:(id <UIDynamicItem>)item;方法,不然animator會忽略所有其他的修改。

7.UIGravityBehavior(重力行為--控制Items的角度以及重力系數)屬性方法:

  1. @property CGFloat angle;
  2. @property CGFloat magnityde; // 1.0 is 1000 points/second/square

8.UICollisionBehavior(碰撞行為--行為中的Items碰撞在一起的時候會撞開,和現實中碰撞一樣,同時可以設置邊界,置頂彈力大小或者密度)屬性方法:

  1. @property UICollisionBehaviorMode collisionMode; // Items, boundaries, Everything(default)
  2. - (void)addBoundaryWithIdentifier:(NSString *)identifier for Path:(UIBezierPath *)path; // 增加邊界
  3. @property BOOL translatesReferenceBoundsIntoBoundary; // 將其設為YES,則會將animator的referenceView的邊界作為邊界

9.UIAttachmentBehavior(吸附行為--默認情況下吸附兩者之間的間距想一個鐵棒,通過對其阻尼大小(damping)和震蕩頻率(oscillation)進行設置可以使其變得想彈簧一樣)屬性方法:

  1. - (instancetype)initWithItem:(id <UIDynamicItem>)item attachedToAnchor:(CGPoint)anchor;
  2. - (instancetype)initWithItem:(id <UIDynamicItem>)item1 attachedToItem:(id <UIDynamicItem>)item2;
  3. - (instancetype)initWithItem:(id <UIDynamicItem>)item offsetFromCenter:(CGPoint)offset...
  4. @property (readwrite) CGFloat length; // 兩個吸附物之間的間距
  5. 同時也可是設置阻尼以及震蕩頻率
  6. @property (readwrite) CGPoint anchorPoint; // 能隨時重新設置

10.UISnapBehavior(速甩行為我覺得這個翻譯實在是不好)屬性方法:

  1. - (instancetype)initWithItem:(id <UIDynamicItem>)item snapToPoint:(CGPoint)point; // 可以想象成在移動到新位置的時候item的四個角都有彈簧,它會晃一下來給予用戶反饋(哦!我到達了!)

11.UIPushBehavior(推動行為)屬性方法:

  1. @property UIPushBehaviorMode mode;
  2. @property CGVector pushDirection;
  3. @property CGFloat magnitude/angle; // 將magnitude設置為1.0將會使用100 points/second/squared 移動100x100的view

12.UIDynamicItemBehavior(動力項行為--如果想要設置了例如摩擦力、彈力、密度等,不管進行什么行為,它的這些屬性應該是一樣的,他們都是在UIDynamicItemBehavior類中設置)屬性方法:

  1. @property BOOL allowsRotation; // 是否可以旋轉
  2. @property BOOL friction; // 摩擦力
  3. @property BOOL elasticity; // 彈力
  4. @property CGFloat density; // 密度
  5. - (CGPoint)linearVelocityForItem:(id <UIDynamicItem>)item; // 獲得動力項不同方向的速度
  6. - (CGPoint)angularVelocityForItem:(id <UIDynamicItem>)item; // 獲得動力項不同角度的速度

13.UIDynamicBehavior是所有行為的子類。可以使用- (void)addChildBehavior:(UIDynamicBehavior *)behavior;方法來添加子行為。

14.所有的behaviors都擁有一個屬性@property UIDynamicAnimator *dynamicAnimator;它們記錄的是所屬UIDynamicAnimator的信息。同時擁有一個方法- (void)willMoveToAnimator:(UIDynamicAnimator *)animator;,該方法會在behavior加入到animator或者移出的時候被調用,加入的時候參數是目標animator,移除的時候參數會被設置成nil。

15.UIDynamicBehavior的action property:@property (copy) void (^action)(void) 想要使用這個屬性,只要使用任意behavior加上.action并且賦值一個block,那么在每次執行behavior的時候都會進行調用該block。

 --------------------------------------------------------------- 多 線 程 ----------------------------------------------------------------------------

1.線程可以理解為queue,queue中都是blocks。

2.MainQueue存儲的是需要改變屏幕顯示或者同步(讓一切改變和UI同步)等操作的block。

3.在另一個線程執行block:

  1. dispatch_queue_t queue = ...; // typedef 類型
  2. dispatch_async(queue, ^{  }); // 將目標隊列以及要執行的block作為參數傳入

4.獲得主要線程:

  1. dispatch_queue_t queue = dispatch_get_main_queue();
  2. NSOperationQueue *mainQ = [NSOperationQueue mainQueue]; // for object-oriented APIs

5.dispatch_queue_t otherQ = dispatch_queue_create("name", NULL); // 第一個是queue的名字,第二個則是指定queue是serial queue(串行隊列)或者concurrent queue(并發隊列),NULL代表是一個serial queue

6.將block放回主線程:

 - (void)performSelectorOnMainThread:(SEL)aMethod

              withObject:(id)obj    // selector方法的參數,可以為nil

            waitUntilDone:(BOOL)waitUntilDone; // is whether you're gonna wait until this thing gets pulled off the main queue and run on the main queue and then finishes before this thread, that's calling this, goes or not.                                   (英文部分不是很理解),通常設置為NO,不需要等待,會直接再主隊列上調用這個方法, 輪到它執行的時候就執行

 dispatch_async(dispatch_get_main_queue(), ^{ /* call aMethod */ })  

7.使用多線程的例子:

  NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL urlWithString:@"http://..."]];

  NSURLConfiguration *configuration = ...;

  NSURLsession *session = ...;

  NSURLSessionDownloadTask *task;

  task = [session downloadTaskWithRequest:request

                completionHandler:^(NSURL *localfile, NSURLResponse *response, NSError *error) {

  /* want to do UI things here can I? */ /* must be main queue */

  }];

  [task resume];

8.創建Session的方法:

  NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration

                                delegate:nil

                             delegateQueue:[NSOperationQueue mainQueue]];

  NSURLSessionDownloadTask *task;

  task = [session downloadTaskWithRequest:request

              completionHandler:^(NSURL *localfile, NSURLResponse *response, NSErr or *error) {

    / * yes, can do UI things directly because this is called on the main queue */

  }];

  [task resume];

9.沒有代理以及代理線程的創建session方法

  NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration]; // no delegateQueue

  NSURLSessionDownloadTask *task;

  task = [session downloadTaskWithRequest:request

               completionHandler:^(NSURL *localfile, NSURLResponse *response, NSError *error) {

    disapatch_async(dispatch_get_main_queue(), ^( /* do UI things */ ));

    or [self performSelectorOnMainThread:@selector(doUIthings) withObject:nil waitUntilDone:NO];

  }];

  [task resume];

10.ScrollView獲得當前顯示區域在整個ScollView中的坐標

  CGRect visibleRect = [scrollView convertRect:scrollView.bounds toView:subview];

11.- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated; // 對rect進行盡可能的方法或者縮小(顯示在屏幕上)

 ------------------------------------------------------------- 表格視圖和iPad --------------------------------------------------------------------------

 


突然感覺學的好像有點快了,開始回頭看以前知識的詳細解釋。

*1:英語不是很好,我的理解是block也是有作用域的,比如[UIView animateWithDuration:NSTimeInterval animations:^(void)animations]這個方法,再執行完該方法的時候可能block就已經失效了,block的作用與就是這一條語句,當然這是我的猜測,如有了解的請務必糾正我。

 

火狐的restart命令會讓博客園自動保存內容全部掛掉?明明自動保存了為什么重啟后讀取保存的幾個小時前的數據?寫了幾個小時就這么沒了,瞬間不想再寫博客了。

還是屈服了,從第4點開始可能記得有點亂,因為之前記了很多結果被該死的自動保存干掉了...

 

有點亂,分個類先


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美多人乱p欧美4p久久| 日韩av在线直播| 亚洲乱亚洲乱妇无码| 亚洲第一精品夜夜躁人人爽| 国产免费观看久久黄| 一本色道久久综合亚洲精品小说| 欧美一区亚洲一区| 亚洲在线观看视频网站| 亚洲免费视频在线观看| 亚洲欧美日韩精品| 欧美大学生性色视频| 亚洲视频网站在线观看| 欧美电影免费观看高清| 欧美性猛交xxx| 精品久久久久久久久久久| 久久精品国产一区二区电影| 日韩电视剧免费观看网站| 日韩国产欧美精品在线| 亚洲女人天堂成人av在线| 黑人精品xxx一区| 亚洲精品国产精品自产a区红杏吧| 久久久电影免费观看完整版| 亚洲精品成a人在线观看| 国产69精品久久久久9| 国内精品免费午夜毛片| 丝袜亚洲欧美日韩综合| 欧美亚洲另类制服自拍| 久久免费高清视频| 成人激情视频小说免费下载| 98精品国产高清在线xxxx天堂| 欧美午夜电影在线| 日韩久久午夜影院| 久久亚洲精品国产亚洲老地址| 久久综合伊人77777尤物| 96精品久久久久中文字幕| 18性欧美xxxⅹ性满足| 国产精品久久久久久久久久东京| 久久天天躁狠狠躁夜夜躁2014| 精品日韩美女的视频高清| 亚洲成人三级在线| 久久手机免费视频| 国产精自产拍久久久久久蜜| 亚洲天堂网站在线观看视频| 国产精品99久久久久久www| 国产香蕉97碰碰久久人人| 久久中文字幕在线视频| 91亚洲国产成人精品性色| 国产成人综合av| 久久精品成人欧美大片古装| 亚洲专区国产精品| 91精品国产综合久久久久久久久| 日本精品va在线观看| 欧美一区二区大胆人体摄影专业网站| 亚洲经典中文字幕| 日韩一区二区福利| 亚洲精品一区二区网址| 一区二区成人精品| 久久av在线播放| 欧美日韩免费在线| 国产精品av电影| 久久99国产精品自在自在app| 欧美视频一区二区三区…| 亚洲国产精品电影在线观看| 国产这里只有精品| 色哟哟网站入口亚洲精品| 国产一区二区三区在线免费观看| 色噜噜久久综合伊人一本| 中文字幕不卡av| 久久69精品久久久久久国产越南| 亚洲伊人久久大香线蕉av| 中文字幕在线看视频国产欧美在线看完整| 国内偷自视频区视频综合| 久久婷婷国产麻豆91天堂| 日韩av一区二区在线观看| 欧美性猛交xxxx富婆弯腰| 国产成人中文字幕| 一区二区三区高清国产| 国产欧美韩国高清| 97国产成人精品视频| 精品国产一区二区在线| 日韩欧美在线中文字幕| 日韩电影视频免费| 欧美在线激情网| 色偷偷88888欧美精品久久久| 欧美日韩国产一区二区| 另类图片亚洲另类| 亚洲精品美女在线| 亚洲人成电影在线观看天堂色| 欧美一区二区视频97| 日韩的一区二区| 日韩hd视频在线观看| 亚洲免费av电影| 国产午夜精品美女视频明星a级| 久久久精品久久久久| www.亚洲男人天堂| 亚洲欧美变态国产另类| 在线丨暗呦小u女国产精品| 久久综合久久美利坚合众国| 97在线观看免费高清| 欧美视频国产精品| 精品视频在线播放色网色视频| 亚洲娇小xxxx欧美娇小| 久久亚洲综合国产精品99麻豆精品福利| 国产精品永久免费观看| 国产精品mp4| 高跟丝袜欧美一区| 国产精品va在线播放我和闺蜜| 亚洲成人av片| 国产精品99久久久久久www| 日韩美女中文字幕| 日韩高清电影好看的电视剧电影| 成人444kkkk在线观看| 亚洲伊人一本大道中文字幕| 色噜噜狠狠狠综合曰曰曰88av| 国产精品一区二区三区在线播放| 日韩av在线直播| 亚洲片国产一区一级在线观看| 久久久久一本一区二区青青蜜月| 色偷偷888欧美精品久久久| 欧美日韩一区二区精品| 欧美在线免费观看| 欧美综合国产精品久久丁香| 日韩在线观看免费网站| 亚洲国产日韩欧美在线图片| 久久精品亚洲国产| 亚洲桃花岛网站| 久久av.com| 日韩亚洲在线观看| 曰本色欧美视频在线| 最近日韩中文字幕中文| 国产精品欧美日韩一区二区| 亚洲va男人天堂| 精品中文字幕在线观看| 91中文精品字幕在线视频| 日韩高清电影好看的电视剧电影| 色久欧美在线视频观看| 国产一区二区视频在线观看| 精品偷拍一区二区三区在线看| 在线观看日韩www视频免费| 欧美日韩不卡合集视频| 精品精品国产国产自在线| 亚洲乱码国产乱码精品精| 日韩美女写真福利在线观看| 夜夜狂射影院欧美极品| 亚洲精品一区二三区不卡| www高清在线视频日韩欧美| 日韩最新av在线| 最新日韩中文字幕| 亚洲福利视频专区| 欧美男插女视频| 亚洲图片在线综合| 精品国产电影一区| 亚洲人成免费电影| 亚洲a区在线视频| 国产亚洲精品91在线| 久久精品国产亚洲精品| 国内精品久久久久久影视8| 国产亚洲欧洲高清| 欧美日韩国产中文精品字幕自在自线| 色综久久综合桃花网| 精品国产区一区二区三区在线观看| 欧美精品免费在线观看| 日韩av成人在线| 欧美乱妇40p|