2014-04-13 3 views
4

settingViewmyView을 표시하고 애니메이션과 함께 사라지게하고 싶습니다.
-showSettingView
if (!self.settingView) : 애니메이션이 올바르게 작동합니다.
그러나 else if (self.myView) : settingView은 애니메이션없이 사라집니다.
애니메이션으로 settingView을 사라지게하려면 어떻게 수정해야합니까?UIView 애니메이션이 작동하지 않습니다.

@property (nonatomic, strong) UIView *myView; 
@property (nonatomic, strong) UIView *settingView; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIBarButtonItem* settingButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(showSettingView)]; 
    self.navigationItem.rightBarButtonItem = settingButton; 
} 

- (void)showSettingView 
{ 
    self.myView = [[UIView alloc]initWithFrame:CGRectMake(0, 568, 320, 480)]; 
    self.myView.opaque = NO; 
    self.myView.backgroundColor = [UIColor colorWithWhite:1.0f alpha:0.0f]; 
    [self.view addSubview:self.myView]; 

    if (!self.settingView) { 
     self.settingView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 568)]; 
     self.settingView.backgroundColor = [UIColor blackColor]; 
     [self.myView addSubview:self.settingView]; 
     [UIView animateWithDuration:0.3f 
           delay:0.0f 
          options:UIViewAnimationOptionTransitionFlipFromBottom 
         animations:^{self.myView.frame = CGRectMake(0, 60, 320, 480);} 
         completion:^(BOOL finished) {} 
     ]; 
    } else if (self.myView){ 
     self.myView.frame = CGRectMake(0, 60, 320, 480); 
     [UIView animateWithDuration:0.3f 
           delay:0.0f 
          options:UIViewAnimationOptionCurveEaseIn 
         animations:^{self.myView.frame = CGRectMake(0, 568, 320, 480);} 
         completion:^(BOOL finished) {} 
     ]; 
     [self.settingView removeFromSuperview]; 
     self.settingView = nil; 
     [self.myView removeFromSuperview]; 
    } 
} 

감사합니다.

답변

6

애니메이션이 시작되기 전에 설정보기를 취소합니다. 다음 블록 전에

A. 대신 프레임의 myView의 제약을 설정하고 : 당신이 자동 레이아웃을 사용하는 경우 다음 옵션 중 하나를 수행해야합니다 또한 *

[UIView animateWithDuration:0.3f 
          delay:0.0f 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{self.myView.frame = CGRectMake(0, 568, 320, 480);} 
        completion:^(BOOL finished) { 
         [self.settingView removeFromSuperview]; 
         self.settingView = nil; 
         [self.myView removeFromSuperview]; 
        } 
    ]; 

을이 시도 블록 내에 layoutIfNeeded:으로 전화하십시오.

B. 애니메이션 블록에서 transform 속성을 설정하십시오.

2

이 라인을 추가하십시오. [self layoutIfNeeded]; 을 애니메이션 블록의 마지막 라인으로 사용하십시오. 다음과 같은 것 :

[UIView animateWithDuration:0.3f 
         delay:0.0f 
        options:UIViewAnimationOptionTransitionFlipFromBottom 
       animations:^{ 
        self.myView.frame = CGRectMake(0, 60, 320, 480); 
        // any other stuff you have to move 

        [self layoutIfNeeded]; 
       } 
       completion:^(BOOL finished) {} 
]; 
관련 문제