【问题标题】:My Core Animation block isn't working like I'd expect我的核心动画块没有像我预期的那样工作
【发布时间】:2010-04-29 04:30:03
【问题描述】:

我有一个名为activityViewUIView,其中包含两个子视图activityIndicatorcancelOperationsButton。这些视图嵌入在 XIB 中并连接到我的视图控制器。

我有两种方法来处理激活(显示)和停用(隐藏)这两个子视图:

- (void) enableActivityIndicator {
    [activityIndicator startAnimating];
    [cancelOperationsButton setHidden:NO];
}

- (void) disableActivityIndicator {
    [activityIndicator stopAnimating];
    [cancelOperationsButton setHidden:YES];
}

这两种方法本身就可以正常工作。

为了稍微润色一下,我想添加一个动画来淡入淡出这些子视图:

- (void) enableActivityIndicator {
    [activityIndicator startAnimating];
    [cancelOperationsButton setHidden:NO];

    [UIView beginAnimations:@"fadeIn" context:nil];
    [UIView setAnimationDelay:0.0f];
    [UIView setAnimationDuration:1.0f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    activityView.alpha = 1.0f;
    [UIView commitAnimations];
}

- (void) disableActivityIndicator {
    [UIView beginAnimations:@"fadeOut" context:nil];
    [UIView setAnimationDelay:0.0f];
    [UIView setAnimationDuration:1.0f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    activityView.alpha = 0.0f;
    [UIView commitAnimations];

    [activityIndicator stopAnimating];
    [cancelOperationsButton setHidden:YES];
}

但是动画不起作用——子视图只是显示或消失,而父视图的 alpha 属性对透明度没有影响。

我应该如何编写这些方法来获得我想要的淡入淡出效果?

编辑

这是一个完美的安排:

- (void) enableActivityIndicator {
    activityView.alpha = 0.0f;
    [activityIndicator startAnimating];
    [cancelOperationsButton setHidden:NO];

    [UIView beginAnimations:@"fadeIn" context:nil];
    [UIView setAnimationDelay:0.0f];
    [UIView setAnimationDuration:0.2f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    activityView.alpha = 1.0f;
    [UIView commitAnimations];
}

- (void) disableActivityIndicator {
    [UIView beginAnimations:@"fadeOut" context:nil];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(disableActivityIndicatorComplete)];
    [UIView setAnimationDelay:0.0f];
    [UIView setAnimationDuration:0.2f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    activityView.alpha = 0.0f;
    [UIView commitAnimations];
}

- (void) disableActivityIndicatorComplete {
    [activityIndicator stopAnimating];
    [cancelOperationsButton setHidden:YES];
}

【问题讨论】:

    标签: iphone animation uiview core-animation


    【解决方案1】:

    在启用中,将视图设置为清除,然后再将动画设置为不透明。

    - (void) enableActivityIndicator {
        ...
        activityView.alpha = 0.0f;
        [cancelOperationsButton setHidden:NO];
        ...
    

    在禁用状态下,在动画完成之前不要隐藏视图。

    - (void) disableActivityIndicator {
        ...
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDidStopSelector:@selector(hideComplete)];
        ...
    
    - (void) hideComplete {
        [activityIndicator stopAnimating];
        [cancelOperationsButton setHidden:YES];
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 2016-06-19
      • 2013-04-11
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2017-09-26
      相关资源
      最近更新 更多