UIButton
서브 클래스 인스턴스 뒤에 UIImageView
하위 클래스 (전체 화면)를 추가하면이 버튼은 터치 수신을 더 이상 중단하고 더 이상 작동하지 않습니다. 내가 시도한 어떤 것도 사용자 접촉에 대한 연결성을 복원하기 위해 노력하지 않았습니다.UIImageView 하위 클래스가 컨트롤러 하위 뷰로 전달되지 않습니다.
I는 시도 :
가 a) 정면 대한 UIImageView
서브 클래스 (즉, 접촉을 수신한다)를 사용하고 setUserInteractionEnabled
가 YES 인 확인한. 결과 : 이있을 때 UIButtons
이 응답하지 않습니다.
b) 옳은 일을하기 위해 전면 뷰에서 뷰 컨트롤러로 명백하게 전달합니다. 결과 : UIButtons
이 (가) 터치에 응답하지 않습니다. I 전면 UIView
상의 터치가 수신 될 때와 상호 작용 할 버튼을 직접 touchesBegan
, touchesMoved
및 touchesEnded
메소드를 호출
c). 결과 : 놀랍게도, 터치 이벤트를 목구멍에 밀어 넣을 때도 버튼이 반응하지 않습니다.
d) 정면에서 터치를 UIViewController
으로 전달하고 터치를 수동으로 전달하는 모든 하위 뷰를 반복합니다. 나는 어떻게 이것을 시도했는지 보여주는 touchesBegan
방법을 포함했다. 실행될 때 루프는 무한하며, 첫 번째 뷰 (유형이 FrameUIView
)를 지나서 진행되지 않습니다.
나는이 문제가 적절한 뷰 계층 구조 또는 응답자 체인에 대한 나의 이해 부족의 결과 일 가능성이 있음을 알고 있습니다.
버튼 이후에 만들어진 마지막보기에 주석을 달면 버튼이 정상적으로 작동합니다. 이 점에서 UIButtons
에 대해 특별한 점이 있습니까?
다음은 코드입니다.
나는 그것에하는 UIViewController 하위이 :이 작업을 수행하는 방법에 대한 팁- (void)loadView {
mainAppView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = mainAppView;
frameImageView = [[FrameUIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
frameImageView.image = [UIImage imageNamed:[[[ThemeController sharedInstance] currentTheme] frameImageFilename]];
[frameImageView setUserInteractionEnabled:YES];
[mainAppView addSubview:frameImageView];
zoomInButton = [[CustomUIButton alloc] initWithFrame:CGRectMake(controlsOriginX + zoomWidth + lightWidth, controlsOriginY, zoomWidth, controlsHeight)];
[zoomInButton setTitle:@"+" forState:UIControlStateNormal];
[[zoomInButton titleLabel] setFont:[UIFont systemFontOfSize:28]];
[zoomInButton addTarget:self action:@selector(doMyAction) forControlEvents:UIControlEventTouchDown];
[zoomInButton addTarget:self action:@selector(cancelMyAction) forControlEvents:UIControlEventTouchUpInside];
[mainAppView addSubview:zoomInButton];
FrameFrontUIView *frameFrontImageView = [[FrameFrontUIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
frameFrontImageView.image = [UIImage imageNamed:[[[ThemeController sharedInstance] currentTheme] frameFrontImageFilename]];
[frameFrontImageView setUserInteractionEnabled:YES];
[mainAppView addSubview:frameFrontImageView];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UIView *view in self.view.subviews) {
NSLog(@"view is a %@", [view description]);
[view touchesBegan:touches withEvent:event];
}
}
사람은 internets와 쿠키를 이긴다. 또한 러시아 룰렛 부상에 대한 리볼버를 수락합니다. 고맙습니다.
분명히 좋은 추측입니다. UIButton을 서브 클래 싱하여 문제를 해결했습니다. 즉, 레이블이나 나머지 버튼이 아닌 배경 이미지의 알파 만 설정할 수 있기를 원합니다.나는 라벨과 액션이있는 맨 위와 이미지 버튼 알파 세트의 맨 아래에 두 개의 버튼을 겹쳐서 표시하는 서브 클래 싱 된 버튼을 만들어이 작업을 수행했습니다. 나는 조금 더 자세히 조사 할 것이고, 나의 다음 단계는 당신이 주식 단추를 제안하고 시도 할 때하는 것이었다. – Royce
좋은 접근 방식이 아닌 것 같습니다. 이것을 시도하십시오 : zoomInButton.imageView.alpha = 0.5; – Felixyz
감사합니다. 당분간이 문제는 setUserInteraction = NO로 발송되었습니다. 이것은 이벤트를 끄고 전경의 이미지 뷰에 의한 소비를 터치하여 앱이 올바르게 작동하도록합니다. 상호 작용을 가능하게하는 방법에 관해서는, 그러나 아직 소비되지 않는 경우에 그 사건 또는 접촉을 전달하십시오 .... 잘 나는 그것을 파악할 수없고 나는 많은 것을 시도했다. – Royce