iOS代理淺析2

 昨晚,作一個相似啪啪的試圖切換demo, 又TM掉代理坑裏了。。。 atom

1,需求:啪啪主頁的左右半拉視圖切換。 spa

2,設計:一個ViewController上有三個子view(A, B, C,不包括ViewController.view), 其中A上有個button,ViewController須要獲取button的點擊事件並改變A,B,C三個vew的frame 線程

3,實現過程: 設計

    (1)ViewController裏面加入三個view 代理

    (2)SquareView裏面加個button並加touch事件 對象

    (3)寫個代理,並設置SquareView爲委託類 事件

      代理方法爲: it

    - (void)buttonTouched 渲染

      @property (nonatomicassign)id<ButtonTouchedDelegate>delegate; 方法

     (4)在button的點擊事件裏面設置其代理對象,爲ViewController

    RootViewController *root = [[RootViewController allocinitWithNibName:nil bundle:nil];

    self.delegate = root;

    [self.delegate buttonTouched];

      (5)在ViewController裏面實現代理方法,而且修改三個View的frame

- (void)buttonTouched {

    CGRect frame = self.squareView.frame;

    frame.origin.x = 280;

    self.squareView.frame = frame;

    CGRect rect = self.leftView.frame;

    rect.origin.x = 0;

    self.leftView.frame = rect;

}

4,出現的問題:frame沒法改變,難道是由於frame只能在主線程裏面修改的緣由?(不是的)

5,解決方案,button的點擊事件裏面ViewController的初始化去掉,也就是不指定delegate的代理對象,在ViewController裏面初始化SquareView對象的時候,指定SquareView的delegate對象爲self,並實現代理方法便可。

6,問題出現的緣由:點擊的時候初始化ViewController對象,並指定其爲代理對象。這個時候,ViewController上的三個view只是建立了,並無渲染,也就是說,代理方法執行的時候,三個view並無進行渲染,因此沒法改變三個view的frame.

7,總結:要特別注意代理方法跟試圖渲染的執行順序。

       
相關文章
相關標籤/搜索