View Programming Guide for IOS:Views笔记

来源:互联网 发布:掌上电力提示网络问题 编辑:程序博客网 时间:2024/06/05 02:29
1.执行画图代码:
“当前绘图上下文”只在执行视图的drawRect方法期间才有效。UIKit有可能会在后续调用drawRect方法时声称一个新的视图上下文,所以你不能试图去缓存这个“当前绘图上下文”并在之后使用它。

- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGRect    myFrame = self.bounds;

 

    // Set the line width to 10 and inset the rectangle by

    // 5 pixels on all sides to compensate for the wider line.

    CGContextSetLineWidth(context, 10);

    CGRectInset(myFrame, 5, 5);

 

    [[UIColor redColor] set];

    UIRectFrame(myFrame);

}

如果你确定你的视图图画代码以opaqu(不透明)的方式覆盖全部的界面,你可以通过设置view的opaque属性为YES来提高系统性能。当标记视图为不透明时,UIKit就不会画那些在此视图下边的视图。这不仅减少画图的时间,也减少了混合视图的工作。然而,只有当你能确定此视图是不透明时(alpha=1.0),才可以把opaque属性设置为YES。
另外一个提升画图性能的方式,特别是在scrolling当中,设置clearsContextBeforeDrawing 为NO。当参数设置为YES时,调用drawRect:前UIKit自动用透明黑色填充rect区域。设置为NO消除了这个操作,同时开发人员需要确认自己填充这块的区域。

2.响应事件
UIView是UIResponder的子类。可以通过addGestureRecognizer:和
  • touchesBegan:withEvent:
  • touchesMoved:withEvent:
  • touchesEnded:withEvent:
  • touchesCancelled:withEvent:
等接收事件。
可以设置multipleTouchEnabled参数来使UIView接收多点触摸。有些UIKit的控件本身就不支持事件。

userInteractionEnabled设置为YES​可以让这些控件(比如UILabel)支持事件响应。同时,也可以通过设置

UIApplication的beginIgnoringInteractionEvents和endIgnoringInteractionEvents方法来使整个应用不接收或者重新开始接收事件。

注意:当UIView的动画在执行的时候往往会使触摸事件失效。可以通过配置动画参数来覆盖这个行为。UIKit使用

hitTest:withEvent:和​pointInside:withEvent:方法来确定一个触摸事件是否发生在指定区域内。大多数时候我们不需要重载这个方法,但是有时候也会需要,比如:阻止子视图对捕捉到的事件做操作。

0 0
原创粉丝点击