Events UIScrollView子类已更改iOS7中的行为

Events UIScrollView子类已更改iOS7中的行为,events,uiscrollview,touch,controls,Events,Uiscrollview,Touch,Controls,我在UIScrollView子类中有一些自定义uicontrol。自定义控件通过检测触摸来改变控件的值,显然,在滚动视图中有触摸敏感控件。这可能很奇怪,用户是否试图上下滚动或改变控件的值 因此,我覆盖了ToucheShouldBegin:withEvent:inContentView和ToucheShouldCancelInContentView方法。在iOS5和iOS6中,如果我将touchHouldBegin设置为TRUE,则表示touch event msg被发送到子视图,而不是滚动视图,

我在UIScrollView子类中有一些自定义uicontrol。自定义控件通过检测触摸来改变控件的值,显然,在滚动视图中有触摸敏感控件。这可能很奇怪,用户是否试图上下滚动或改变控件的值

因此,我覆盖了ToucheShouldBegin:withEvent:inContentView和ToucheShouldCancelInContentView方法。在iOS5和iOS6中,如果我将touchHouldBegin设置为TRUE,则表示touch event msg被发送到子视图,而不是滚动视图,只有控件工作,滚动视图不会滚动,这很好。然而,在iOS7中,一些事情发生了变化,谁也猜不到,scrollview将滚动,就像什么都没有改变一样,但同时控件也会收到消息。如果我触摸并拖动控件的速度足够慢,它将工作,但如果我移动手指以加快速度,scrollview将接管并开始滚动

- (BOOL) touchesShouldBegin: (NSSet *) _touches
              withEvent: (UIEvent *) _event
          inContentView: (UIView *) _view{

self.touch = _touches.anyObject;

if ([_view isKindOfClass: [MyControl class]])
{
    MyControl *control = (MyControl *)_view;
    if ([control touchWasOnTrackButton: _touches.anyObject] ||
        [control touchWasOnInnerButton: _touches.anyObject])
    {
        NSLog(@"CONTROL TOUCHED");
        return YES;
    }
    else
    {
        NSLog(@"TABLEVIEW TOUCHED");
        return NO;
    }
}
else
{
    NSLog(@"TABLEVIEW TOUCHED");
    BOOL touchesShouldBegin = [super touchesShouldBegin: _touches withEvent: _event inContentView: _view];
    return touchesShouldBegin;
}
}

有人知道iOS7发生了什么变化,以及他们是如何解决这个问题的吗。谢谢

,所以我可以用一些相当粗糙的方法解决这个问题

我的UIControl子类具有用于controlStartedTracking和controlStoppedTracking的协议方法。在controlStatedTracking中,我将myScrollViewReference.scrollEnabled设置为FALSE;在controlStoppedTracking中,我重新启用了myScrollViewReference.scrollEnabled


如果有人做得更好,让我知道,听起来我很伤心。请向苹果提交一个bug!