您的位置:首页 > 产品设计 > UI/UE

View Programming Guide for IOS:Views笔记

2015-01-15 17:22 260 查看
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:方法来确定一个触摸事件是否发生在指定区域内。大多数时候我们不需要重载这个方法,但是有时候也会需要,比如:阻止子视图对捕捉到的事件做操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: