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

UIView 重绘与多点触控事件处理

2015-09-15 14:47 330 查看
UIView除了负责界面的处理外,同事也继承了UIResponder这个类。所以它也必须要处理一些常见的事件,例如界面的重绘以及多点触控事件的处理。

1.重绘事件的处理

- (void) drawRect:(CGRect) rect;


一般来说,我们不需要重载UIView的drawRect:的方法。但是在某些情况下,例如要动态制作某些图形到UIView上面的适合,我们就可以在继承UIView 的类里面重载drawRect:方法。由于这个方法属于回调函数(callback),因此它会在界面重画时自动调用。如果要强迫iPhone重绘界面的适合,也请不要直接调用这个方法,而是通过 UIView 的setNeedsDisplay 来更新界面,或者是通过 setNeedsDisplayInRect: 来局部更新某个区域的界面。

2.多点触控事件处理

由于UIView 继承了 UIResponder,因此,我们可以直接在 UIView里面处理有关多点触控的事件。

-(void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event;
-(void) touchesMoved:(NSSet *) touches withEvent:(UIEvent *) event;
-(void) touchesEnded:(NSSet *) touches withEvent:(UIEvent *) event;


这三个方法会再触控到UIView 所属的区域时自动调用。不论使用几根手指触控,碰到屏幕的一开始,就会发送一词touchesBegan:withEvent:的消息,其中,touches表示不分先后顺序的多个触控点,event则为触控的事件,可以得到在这个触控事件内有几个点击数(tapCount);当按住界面移动的时候,touchesMoved:withEvent:的这个消息则会被发送出去,一直到放开手指后才回发送touchesEnded:withEvent:的消息,整个触控事件才算结束。

例如下面这段常用到得源代码

-(void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event{
UITouch *touch = [touches anyObject];
//或 UITouch *touch = [[touches allObjects] objectAtIndex:0];
CGPoint location = [touch locationInView:self];  //取得触控点
...
if([touch tapCount] == 2){   //若点击两下
...
}
}


在一般情况下,我们只在乎用户的点击操作,通过NSSet里面anyObject 方法可以取得任一个触控点。相对的,如果很在意用户用了几个手指通过UITOuch 类的locationInView: 来取得触控点得位置,以及通过tapCount 来取得用户点击的次数

通过多点触控,我们做一个应用程序,这个应用程序是以人的3个手指来表示颜色中得R、G、B (红绿蓝)。第一个手指头表示R,第二个表示G,第三个表示B,也可以只使用一个或两个手指头来改变界面的颜色。

\\ViewController.m

-(void) touchesMoved:(NSSet *) touches withEvent:(UIEvent *)event {
int count = [touches count];
switch (count){
case 3:
blueColor = (blueColor>1)?0:blueColor+0.05;
case 2:
greenColor = (greenColor>1)?0:greenColor+0.05;
case 1:
redColor = (redColor>1)?0:redColor+0.05;
default:
break;
}
self.view.backgroundColor = [UIColor colorWithRed:redColor
green:greenColor
blue:blueColor
alpha:1.0];


其中,颜色值的部分是通过 UIColor这个类来产生的,通过RGBA来制定红绿蓝三种颜色以及 Alpha值,要注意,这三个颜色值范围是从0到1 而非255.

Xcode默认产生的 Storyboard里面的界面中得 Multiple touch 的选项是取消状态,只要勾选就可以接受多点触控了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: