사용자가 슬라이더 포인터의 드래그를 종료했을 때 이벤트를 감지하는 방법은 무엇입니까?
답변
드래그 사이에 데이터가 필요하지 않은 경우 간단히 설정해야합니다.
[mySlider setContinuous: NO];
이렇게 valueChanged
하면 사용자가 슬라이더 이동을 중지 할 때만 이벤트 를 받게 됩니다.
Swift 5 버전 :
mySlider.isContinuous = false
답변
UIControlEventValueChanged에 대해 두 개의 매개 변수 (발신자 및 이벤트)를 취하는 조치를 추가 할 수 있습니다 .
[slider addTarget:self action:@selector(onSliderValChanged:forEvent:) forControlEvents:UIControlEventValueChanged]
그런 다음 핸들러에서 터치 개체의 단계를 확인합니다.
- (void)onSliderValChanged:(UISlider*)slider forEvent:(UIEvent*)event {
UITouch *touchEvent = [[event allTouches] anyObject];
switch (touchEvent.phase) {
case UITouchPhaseBegan:
// handle drag began
break;
case UITouchPhaseMoved:
// handle drag moved
break;
case UITouchPhaseEnded:
// handle drag ended
break;
default:
break;
}
}
Swift 4 및 5
slider.addTarget(self, action: #selector(onSliderValChanged(slider:event:)), for: .valueChanged)
@objc func onSliderValChanged(slider: UISlider, event: UIEvent) {
if let touchEvent = event.allTouches?.first {
switch touchEvent.phase {
case .began:
// handle drag began
case .moved:
// handle drag moved
case .ended:
// handle drag ended
default:
break
}
}
}
작업을 추가 할 때 Interface Builder에서 작업에 보낸 사람과 이벤트 매개 변수를 모두 추가 할 수도 있습니다.
답변
“내부 손질”및 “외부 손질”알림을 사용합니다.
인터페이스 빌더 :
Interface Builder의 두 알림을 수신 방법에 연결하십시오. 방법은 다음과 같습니다.
- (IBAction)lengthSliderDidEndSliding:(id)sender {
NSLog(@"Slider did end sliding... Do your stuff here");
}
코드에서 :
프로그래밍 방식으로 연결하려면 viewWillAppear (또는 적합한 위치) 호출에 다음과 같은 내용이 표시됩니다.
[_mySlider addTarget:self
action:@selector(sliderDidEndSliding:)
forControlEvents:(UIControlEventTouchUpInside | UIControlEventTouchUpOutside)];
수신 방법은 다음과 같습니다.
- (void)sliderDidEndSliding:(NSNotification *)notification {
NSLog(@"Slider did end sliding... Do your stuff here");
}
답변
은의 UISlider
하위 클래스 이므로 UIControl
해당에 대한 대상과 작업을 설정할 수 있습니다 UIControlEventTouchUpInside
.
코드에서 수행하려는 경우 다음과 같습니다.
[self.slider addTarget:self action:@selector(dragEndedForSlider:)
forControlEvents:UIControlEventTouchUpInside];
dragEndedForSlider:
터치가 끝나면 메시지 가 전송 됩니다.
펜촉에서이 작업을 수행하려면 슬라이더를 컨트롤-클릭하여 연결 메뉴를 가져온 다음 “Touch Up Inside”소켓에서 대상 개체로 드래그 할 수 있습니다.
또한에 대한 대상과 작업을 추가해야 UIControlEventTouchUpOutside
합니다 UIControlEventTouchCancel
.
답변
Swift 5 및 Swift 4
-
touchUpInside
및touchUpOutside
이벤트에 대한 대상을 추가하십시오 . 프로그래밍 방식으로 또는 스토리 보드에서 수행 할 수 있습니다. 이것이 프로그래밍 방식으로 수행하는 방법입니다.slider.addTarget(self, action: #selector(sliderDidEndSliding), for: [.touchUpInside, .touchUpOutside])
-
슬라이더 드래그 끝을 처리하는 함수 작성
func sliderDidEndSliding() { print("end sliding") }
답변
당신이 사용할 수있는:
- (void)addTarget:(id)target action:(SEL)action
forControlEvents:(UIControlEvents)controlEvents
UISlider에서 touchDown 및 touchUp 이벤트가 발생하는시기를 감지합니다.