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中)我一直在寻找…用触摸跟踪的方法。以前我使用的是类似的设置,只是我试图传递触摸…
事件。现在它起作用了。谢谢