今天自定义了一个滑块控件发现
jsyscroll.png
点击红色区域也会跟着耍,跟着移动其反应,而我只想点击进度条滑块才发生相应的反应,那么我怎么处理呢
#pragma mark ---UIColor Touchu
-(BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
BOOL bStatus = NO; // no 是不反应了
do {
// 判断是否是进度条
CGPoint point = [touch locationInView:self];
if ((point.y >= self.defaultView.frame.origin.y)&&(point.y <= CGRectGetMaxY(self.defaultView.frame) )) {
bStatus = YES;
}
else
{
break;
}
} while (FALSE);
return bStatus;
}
self.defaultView 就是我画的进度条,因为所有子控件都建立在UIControl 的控件上,beginTrackingWithTouch响应消息是这对于UIControl这个整体控件的,要区分哪个坐标点是哪个空间通过判断y值就可以了,所解析的坐标点也是相对于改整体控件的。
这里需要注意
// 这个函数是点击后开始滑动也就是beginTrackingWithTouch调用后才调用
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
[self sendActionsForControlEvents:UIControlEventValueChanged];
return YES;
}
这个函数不用判断哪个控件是因为我已经开始拖动了,如果拖动偏离了滑块控件,就停止,会给人一种很不友好的交互感觉。