2013-03-03 7 views
9

이 포럼에서 "UIView 내부의 UIButton, 애니메이션이 작동하지 않을 때"와 같은 질문을 많이 보았지만 답변을 시도한 후에는UIView 내 UIView 내부에 UIButton이 작동하지 않습니다.

과 같은 답변을 시도했습니다. 그들 중 누구도 여기

:-(나를 위해 작동하지 않습니다

a) UIViewAnimationOptionAllowUserInteraction to the options 
b) subView.setUserInteractionEnabled = YES 
c) [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside]; 

는 시나리오입니다. 앱은 가로 모드에 있고있는 UIView는 menuView가 X = 480에 위치라는, Y = 0. 높이 = 200 width = 150입니다. 따라서 오른쪽 상단의 버튼을 누르면 다음 코드가 실행됩니다.

- (IBAction)showMenu { 
    [menuView setUserInteractionEnabled:YES]; 
    [optionsButton setUserInteractionEnabled:YES]; 
    [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction 
        animations:^{ 
         self.view.frame = CGRectOffset(self.view.frame, 0, 200); 
        } 
        completion:NULL]; 
} 

출력? :보기가 나타나지만 menuView 내의 optionsButton을 클릭 할 수 없습니다. 나는 이벤트에 매여 ("옵션 버튼을 클릭"@)를 NSLog를했지만 아무것도

내가 뭘 잘못 알려주세요 :-(발생하지

업데이트 : 내가 배치 할 때 subview는 self.view 내부의 "menuView"이며, 실행하고 optionsButton을 클릭하면 NSLog 메시지가 나타납니다. menuView의 origin.x를 480 이상으로 지정하면 작동하지 않습니다.

+1

아마도 콘센트를 연결하지 않았기 때문에 무의미한 것 같습니다. – CodaFi

+1

콘센트에 연결되지 않았습니까? 버튼이나 뷰에 대해 말하면, 나는 .h 파일의 봇에 연결합니다. @ 속성 (weak, nonatomic) IBOutlet UIView * menuView; @ 속성 (weak, nonatomic) IBOutlet UIButton * optionsButton; – thandasoru

+1

중단 점을 설정하고 확인하십시오. – CodaFi

답변

24

UIButton을 볼 수있는 경우 userInteractionEnabled (기본값은 YES!)으로 설정되어 있으며 수퍼바이저의 userInteractionEnabled은 전체 계층 구조에서 YES입니다. 사용자가 상호 작용할 수 있어야합니다.

애니메이션은 userInteractionEnabled 속성을 절대로 변경하지 않습니다! 그래서 당신이하는 일은 단순히 불필요한 일입니다. 애니메이션 중에 상호 작용 을 사용하려고하면 다른 이야기이며 애니메이션 메시지로 전달되는 옵션 일뿐입니다.

그렇다면 문제가 아니며 아마 그렇지 않을 수도 있습니다. 그렇다면 수퍼 뷰의 프레임 중 하나가 UIButton을 자르고있는 것 같습니다. clipsToBounds가 수퍼에 설정하지 않는 한 UIView의의 프레임 외부에있는 있는 UIButton (또는 UIView의) 경우

지금 당신이보고, 그것은 여전히 ​​볼 수 있습니다.

그 상황의 결과는 다음과 같습니다. 나를 볼 수는 있지만 나를 만질 수는 없습니다.

+1

좋아, 내가 UIView (menuView) 안에 UIButton의 너비를 185로 만들었습니다. menuView의 너비는 200입니다. 너비가 480 인 superview의 프레임이 UIButton을 자르고 있는지 어떻게 알 수 있습니까? 여기 좀 도와 줄 수있어? – thandasoru

+1

내 self.view 내부에 menuView를 배치하고 앱을 실행하면 작동합니다. 내가 menuView를 밖에 배치하고 self.view.frame을 200만큼 오프셋하려고 할 때만 작동하지 않습니다. 사실, menuView가 self.view 내부에 있지 않기 때문인 것 같습니다. 그래서 selfView의 너비를 늘려 menuView를 수용하면, 제대로 작동할까요? – thandasoru

+1

menuView를 self.view의 "outside"에 두는 경우 정확히 어디에 있습니까? 뷰의 계층 구조를 정확하게 설명 할 수 있습니까? –

5

내 경우에는 포함 된 뷰의 높이에 대한 제약 조건이 없어서 뷰의 높이가 0이되었습니다. 뷰 아래에는 버튼이 있지만 보이지 않는 것은 볼 수있었습니다.

1

제 경우에는 애니메이션으로 전환하는 것이 아직 완료되지 않은 것 같습니다. 내 animateTransition:context 메소드 끝에 completeTransition:Bool을 넣는 것을 잊었습니다.

2

나를 위해 그것은 애니메이션 코드 자체에서 간과 한 실수에 관한 것이 었습니다. 내 새로운 높이가 호출 된 곳에서 실제로 새로운 폭을 호출하고 있었고 새로운 폭이 호출되는 곳에서 실제로 UIView가 매우 길어서 매우 좁은 UIView를 생성하여 센터의 모든 내용을 푸시합니다. 보기 범위 밖의보기.

  • UIViews 배경색을 빨간색으로 변경하여 실제로 움직이는 위치를 실제로 볼 수 있습니다.

  • UIView가 다른보기에있는 경우 clipSubviews을 켜서 subView 내에서 실제로 활성화 된 것을 볼 수있게하십시오.

  • 프로젝트를 실행하십시오.

UIView의 높이와 너비가 정상이 아닌 경우 애니메이션 호출에서 일부 코드를 간과 한 것일 수 있습니다.

x, y, width, height이 애니메이션 코드 내에서 올바른 순서로 표시되는지 확인하십시오.

관련 문제