2011-10-15 115 views
1

我正在做一個自定義繪製在我的應用程序的drawRect方法中查看。何時更改UIView的幀大小,而自定義繪製?

我捕捉到用戶的捏手勢,並基於此,我希望每次更改視圖的幀大小。

我試着在drawRect方法中改變UIView的框架。但我覺得這是不對的地方,因爲drawRect要求我們繪製一個特定的矩形。

我確實創建了一個協議,當我捕獲時,我試圖在協議方法的幫助下,從視圖控制器中更改視圖的幀大小。但是這也沒有奏效。

我該如何做到這一點?

UPDATE:

我能夠改變從自定義的UIView awakeFromNib方法的UIView的框架。但我有必要根據用戶的操作來定期更改幀,並且沒有找到任何方法來重新加載awakeFromNib方法..

回答

1

這些僅僅是示例,需要修改以適合您的具體情況,但可以可能使用CGRectApplyAffineTransformUIView動畫:

- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender { 
    UIView *senderView = sender.view; 
    if (sender.state == UIGestureRecognizerStateBegan) { 
     initialFrame = senderView.frame; 
    } 
    CGFloat factor = [(UIPinchGestureRecognizer *)sender scale]; 
    CGAffineTransform zt = CGAffineTransformScale(CGAffineTransformIdentity, factor, factor); 
    senderView.frame = CGRectApplyAffineTransform(initialFrame, zt); 
    return; 
} 

/* -------------------------------------------------------------------------- */ 

- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender { 
    UIView *senderView = sender.view; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.35f]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 

    /* Set changes for the animation before calling commitAnimations 
    self.tableView.layer.borderWidth = 3.0; 
    self.tableView.layer.borderColor = [[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.85] CGColor]; 
    self.tableView.layer.backgroundColor = [[UIColor colorWithWhite:0.2 alpha:0.5] CGColor]; 
    self.tableView.layer.shadowOffset = CGSizeMake(4.0, 2.0); 
    self.tableView.layer.shadowColor = [[UIColor blackColor] CGColor]; 
    self.tableView.layer.shadowOpacity = 1.0; 
    self.tableView.layer.shadowRadius = 2.0; 
    self.tableView.layer.cornerRadius = 10.0; 
    */ 

    [UIView commitAnimations]; 
} 
+0

感謝您的回答。爲它+1。但是我還有一個疑問,我不想根據用戶的喜好來增加框架的大小。相反,我想在某些情況下將幀大小更改爲某個CGRect。我如何將這個CGrect應用於這個轉換? – Krishnan