2013-10-14 39 views
0

我有两个自定义UIControls。这些是滚动轮。重叠的UIControls

它们的帧重叠。在屏幕截图上,左上方的那个位于右侧的后面。在重叠区域内触摸开始时,我如何才能从左侧开始追踪?

我beginTrackingWithTouch看起来是这样的:

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { 
if (!insideCircle) return NO; } // pseudo-code 

如何事件被传播到响应没有UIControls背后有何看法?

overlapping frames

回答

3

我的建议是:
1)子类的UIView你的车轮,例如WheelView;
2)覆盖-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
例如:

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event 
{ 
    CGFloat xOffset = (point.x - self.bounds.size.width/2); 
    CGFloat yOffset = (point.y - self.bounds.size.height/2); 
    CGFloat distanceSqr = xOffset * xOffset + yOffset * yOffset; 
    if (distanceSqr > radius * radius) 
    { 
     // touch point is outside of circle 
     return NO; 
    } 
    return YES; 
} 

所以,当你将返回NO,一碰就会被传播到下一个视图,这是 “下面”。然而,当您的圈子重叠时,这不会起作用 - 只有在框架出现时,才会显示在屏幕截图上。

+0

没关系。圆圈不会重叠 – alecail

+0

同意。 OP应该接受这个答案。 –

+0

@Vrol我可以抽出时间来测试它吗? – alecail