Ios 自定义UISlider以处理从外部开始的触摸

Ios 自定义UISlider以处理从外部开始的触摸,ios,cocoa-touch,event-handling,uikit,uislider,Ios,Cocoa Touch,Event Handling,Uikit,Uislider,我想在UISlider(在其superview中)之外开始触摸,当触摸移动到UISlider上时,像正常一样滑动它。我应该如何实现这一点?使您的superview成为此自定义类,并将滑块连接到滑块。它应该做你需要的,除非你有任何自定义跟踪滑块本身。这可能无法与superview上的任何手势识别器配合使用(例如,如果superview是滚动视图,则所有赌注都将被取消) 这也会盲目地忽略superview中可能需要响应触摸的其他视图。如果您使用更精细的控制,请更新hitTest:forEvent:,

我想在
UISlider
(在其superview中)之外开始触摸,当触摸移动到
UISlider
上时,像正常一样滑动它。我应该如何实现这一点?

使您的superview成为此自定义类,并将
滑块连接到滑块。它应该做你需要的,除非你有任何自定义跟踪滑块本身。这可能无法与superview上的任何手势识别器配合使用(例如,如果superview是滚动视图,则所有赌注都将被取消)

这也会盲目地忽略superview中可能需要响应触摸的其他视图。如果您使用更精细的控制,请更新
hitTest:forEvent:
,并仅在适当时返回MyView或滑块

@interface MyView : UIView
{
    BOOL _tracking;
}
@property (nonatomic, strong) IBOutlet UISlider *slider;
@end

@implementation MyView
@synthesize slider;

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *superAnswer = [super hitTest:point withEvent:event];
    if( [superAnswer isEqual:self.slider] ) {
        return( superAnswer );
    }
    else {
        return( self );
    }
}

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *aTouch = [touches anyObject];
    if( [self.slider pointInside:[aTouch locationInView:self.slider] withEvent:event] ) {
        if( _tracking ) {
            [self.slider continueTrackingWithTouch:aTouch withEvent:event];
        }
        else {
            [self.slider beginTrackingWithTouch:aTouch withEvent:event];
            _tracking = YES;
        }
    }
    else {
        if( _tracking ) {
            [self.slider endTrackingWithTouch:aTouch withEvent:event];
            _tracking = NO;
        }
    }
}
@end

你的意思是当触摸移动到滑块的拇指上时,你想开始滑动吗?滑块忽略在其拇指外滑块轨迹上开始的触摸。@robmayoff是的,我想在触摸移动到拇指上时开始滑动,而不管触摸从何处开始。(在
UISlider
的其他地方,或者在superview中)我一直在寻找
…用触摸跟踪的方法。以前我使用的是类似的设置,只是我试图传递
触摸…
事件。现在它起作用了。谢谢