UIGestureRecognizer를 여러보기에 연결할 수 있습니까?
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTapTap:)];
[self.view1 addGestureRecognizer:tapGesture];
[self.view2 addGestureRecognizer:tapGesture];
[tapGesture release];
위의 코드에서는 탭만 view2
인식됩니다. 세 번째 줄을 주석 처리하면 탭 view1
이 인식됩니다. 내가 옳고 제스처 인식기를 한 번만 사용할 수 있다면 이것이 버그인지 확실하지 않거나 더 많은 문서가 필요합니다.
A UIGestureRecognizer
는 단일 뷰와 함께 사용됩니다. 문서가 드물다는 데 동의합니다. 그것은 UIGestureRecognizer
하나의 view
속성을 가지고 있습니다 :
전망
제스처 인식기가 연결된보기입니다. (읽기 전용)
@property (비 원자, 읽기 전용) UIView * view
토론 addGestureRecognizer : 메소드를 사용하여 제스처 인식기를 UIView 객체에 첨부 (또는 추가)합니다.
아래를 사용하여 문제를 해결했습니다.
for (UIButton *aButton in myButtons) {
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
longPress.minimumPressDuration=1.0;
[aButton addGestureRecognizer:longPress];
[longPress release];
}
그런 다음 handleLongPress 메서드에서 제스처 인식기의 뷰와 동일한 UIButton을 설정하고 해당 버튼을 기반으로 수행하는 작업을 분기합니다.
- (void)handleLongPress:(UILongPressGestureRecognizer*)gesture {
if ( gesture.state == UIGestureRecognizerStateEnded ) {
UIButton *whichButton=(UIButton *)[gesture view];
selectedButton=(UIButton *)[gesture view];
....
}
누군가가 이것을 요구하는 경우 Swift 3의 경우 : 위의 Bhavik Rathod Answer에 근거합니다.
func setGestureRecognizer() -> UIPanGestureRecognizer {
var panRecognizer = UIPanGestureRecognizer()
panRecognizer = UIPanGestureRecognizer (target: self, action: #selector(pan(panGesture:)))
panRecognizer.minimumNumberOfTouches = 1
panRecognizer.maximumNumberOfTouches = 1
return panRecognizer
}
///set the recognize in multiple views
view1.addGestureRecognizer(setGestureRecognizer())
view2.addGestureRecognizer(setGestureRecognizer())
우리는 무언가를 할 수 있습니다. 이렇게 쉽고 간단합니다
1) 컨트롤러에서 아래와 같이 함수를 만듭니다 (이 함수는 GestureRecognizer를 반환합니다)
-(UITapGestureRecognizer*)setRecognizer{
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openProfile)];
[gestureRecognizer setNumberOfTapsRequired:1];
return gestureRecognizer;
}
2) 이제이 인식기를 여러보기로 설정하십시오.
[self.view1 addGestureRecognizer:[self setRecognizer]];
[self.view2 addGestureRecognizer:[self setRecognizer]];
아니오. 제스처 인식기를 둘 이상의보기에 첨부해서는 안됩니다.
Apple 문서에는 다음과 같은 명시적인 정보가 있습니다.
제스처 인식기가 뷰에 연결됩니다
모든 제스처 인식기는 하나의 뷰와 연결됩니다. 반대로, 하나의보기가 여러 가지 다른 제스처에 응답 할 수 있기 때문에보기에는 여러 개의 제스처 인식기가있을 수 있습니다. 제스처 인식기가 특정보기에서 발생하는 터치를 인식하려면 제스처 인식기를 해당보기에 연결해야합니다.
iOS 용 이벤트 처리 안내서-제스처 인식기 Apple Developer Library
다른 사람들이 언급했듯이 일부 경우에는 작동 할 수 있지만 문서와 분명히 반대이며 향후 iOS 버전에서 변경 될 수 있습니다.
수행 할 수있는 작업은 모니터링하려는보기에 별도의 제스처 인식기를 추가하고 공통 동작을 공유 할 수 있다는 것입니다.
kwalker 와 같은 여러 버튼에 대한 제스처보기를 추가하기 위해 코드를 작성하지 않으려면 Interface Builder를 통해 수행하려는 경우 도움이 될 수 있습니다.
1) UIButton 및 UILabels와 같은 다른 객체를 추가하는 것처럼 객체 라이브러리에서 Long Press 제스처 인식기를 추가 할 수 있습니다.
처음에 내가 사용한 것은 하나만 가져갔습니다.
2) 참조 아웃렛을 설정 UIButton
하고 파일 소유자와 조치를 보냄.
참고 : UIButton 또는 다른 객체가 여러 개인 경우 각각에 대해 별도의 제스처 인식기가 필요합니다. 자세한 내용은이 질문을 참조하십시오. 길게 누르기 제스처 인식기에서 잘못된 UIButton 태그 가져 오기
' <UIScrollViewDelegate>
'로 클래스 재정 의
그리고 .m 클래스 에서이 방법을 사용하십시오 :
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
이 방법을 사용하면 단일보기에서 여러 번 스 와이프 할 수 있습니다.
동일한 기능을 가리키는 제스처 인식기를 추가 할 때마다 GestureRecognize를 다시 작성 (재 작성)하는 방법은 무엇입니까? 아래의 경우 작동합니다. IBOutletCollection을 사용하고 있습니다
스위프트 2 :
@IBOutlet var topicView: [UIView]!
override func viewDidLoad() {
for view in self.topicView as [UIView] {
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "viewClicked:"))
}
}
func viewClicked(recognizer: UITapGestureRecognizer) {
print("tap")
}
당신이 고정보기를 가지고 있다면 나는 당신이 이런 식으로하는 것이 좋습니다
[self.view1 addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTapTap:)]];
[self.view2 addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTapTap:)]];
그렇게하면 여러 가지 다른 쓸모없는 변수가 줄어 듭니다.
제스처 인식기를 쉽게 추가하기 위해 뷰에서 일반 확장을 만들 수 있습니다. 이것은 단지 예일 뿐이지 만 다음과 같이 보일 수 있습니다
extension UIView {
func setGestureRecognizer<Gesture: UIGestureRecognizer>(of type: Gesture.Type, target: Any, actionSelector: Selector, swipeDirection: UISwipeGestureRecognizer.Direction? = nil, numOfTaps: Int = 1) {
let getRecognizer = type.init(target: target, action: actionSelector)
switch getRecognizer {
case let swipeGesture as UISwipeGestureRecognizer:
guard let direction = swipeDirection else { return }
swipeGesture.direction = direction
self.addGestureRecognizer(swipeGesture)
case let tapGesture as UITapGestureRecognizer:
tapGesture.numberOfTapsRequired = numOfTaps
self.addGestureRecognizer(tapGesture)
default:
self.addGestureRecognizer(getRecognizer)
}
}
}
뷰에 2 탭 인식기를 추가하려면 전화하십시오.
let actionSelector = #selector(actionToExecute)
view.setGestureRecognizer(of: UITapGestureRecognizer.self, target: self, actionSelector: actionSelector, numOfTaps: 2)
스 와이프 인식기를 쉽게 추가 할 수도 있습니다.
view.setGestureRecognizer(of: UISwipeGestureRecognizer.self, target: self, actionSelector: actionSelector, swipeDirection: .down)
등등. 대상은 선택기와 연결되어 있어야합니다.
이 코드를 사용하여 xib의 이미지 뷰 인 내보기를 사용할 수 있습니다.
- (void)viewDidLoad
{
firstIV.tag = 501;
secondIV.tag = 502;
thirdIV.tag = 503;
forthIV.tag = 504;
[self addTapGesturetoImageView: firstIV];
[self addTapGesturetoImageView: secondIV];
[self addTapGesturetoImageView: thirdIV];
[self addTapGesturetoImageView: forthIV];
}
-(void)addTapGesturetoImageView:(UIImageView*)iv
{
iv.userInteractionEnabled = YES;
UITapGestureRecognizer * textfielBGIVTapGasture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textfielBGIVTapped:)];
textfielBGIVTapGasture.numberOfTapsRequired = 1;
[iv addGestureRecognizer:textfielBGIVTapGasture];
}
- (void)textfielBGIVTapped:(UITapGestureRecognizer *)recognizer {
int tag = recognizer.view.tag-500;
switch (tag) {
case 1:
{
//firstIV tapped;
break;
}
case 2:
{
//secondIV tapped;
break;
}
case 3:
{
//thirdIV tapped;
break;
}
case 4:
{
//forthIV tapped;
break;
}
default: {
break;
}
}
}
참고 URL : https://stackoverflow.com/questions/4747238/can-you-attach-a-uigesturerecognizer-to-multiple-views
'Programing' 카테고리의 다른 글
타이프 스크립트 내보내기와 기본 내보내기 (0) | 2020.04.23 |
---|---|
형태와 반응 형 배열 (0) | 2020.04.23 |
JSP에서 클래스를 어떻게 가져 옵니까? (0) | 2020.04.23 |
Visual Studio 2010-C ++ 프로젝트-* .sdf 파일 제거 (0) | 2020.04.23 |
Pylint 경고를 비활성화하려면 어떻게합니까? (0) | 2020.04.22 |