2011-10-15 70 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