动画UIView alpha的问题

时间:2013-09-20 11:54:34

标签: iphone ios objective-c uiview

我试图将淡入淡出应用于我在另一个上面以编程方式创建的UIView。

[UIView animateWithDuration:0.5 animations:^(void) {
    [self.view setAlpha:0];
}
                 completion:^(BOOL finished){
                     [self.view removeFromSuperview];
                 }];

完成的事件在0.5秒之后被正确调用,但我没有看到任何淡入淡出(我应该看到底部的UIView)。

如果不使用alpha,我会移开UIView它可以工作(我看到底部UIView,而顶部UIView滑开),所以它似乎是一个与alpha相关的问题,但我无法形象出了什么问题!

[UIView animateWithDuration:0.5 animations:^(void) {
    CGRect o = self.view.frame;
    o.origin.x = 320;
    self.view.frame = o;
}
                 completion:^(BOOL finished){
                     [self.view removeFromSuperview];
                 }];

我之前使用过alpha动画,它们通常以这种方式工作......

6 个答案:

答案 0 :(得分:6)

尝试明确地将opaque设置为NO。我有同样的问题和设置解决了我的问题。显然,不透明的观点似乎与alpha不相符。

但是归功于Hampus Nilsson的评论。

答案 1 :(得分:2)

[UIView animateWithDuration:0.6 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
animations:^{
    [self.view setAlpha:0];
} 
completion:^(BOOL finished) {
    [self.view removeFromSuperview];
}];

这样做是正确的,因为options:UIViewAnimationOptionCurveEaseInOut,你的褪色会更好。

答案 2 :(得分:1)

我遇到了确切的问题。就我而言,我希望首先隐藏视图,因此我将hidden设置为true。我想更改alpha值会自动更改hidden属性,但事实并非如此。

因此,如果您希望首先隐藏视图,请将其alpha设置为0

答案 3 :(得分:0)

我有完全相同的问题,并没有一个建议对我有用。我通过使用图层不透明度来克服这个问题。 这是显示图层的代码(使用Xamarin,但你会得到这个想法):

        //Enter the view fading
        zoomView.Layer.Opacity = 0;

        UIApplication.SharedApplication.KeyWindow.RootViewController.View.Add(zoomView);

        UIView.AnimateNotify(
            0.15, // duration
            () => { zoomView.Layer.Opacity = 1.0f },
            (finished) => { }
        );

这是为了淡出相同的zoomView

UIView.AnimateNotify(
                0.15, // duration
                () => { zoomView.Layer.Opacity = 0; },
                (finished) =>
                {
                    if (finished)
                    {
                        zoomView.RemoveFromSuperview();
                    }
                }
            );

答案 4 :(得分:0)

我遇到同样的问题因为线程 所以我最终在主线程中写了动画块。

dispatch_async(dispatch_get_main_queue(), ^{        
    [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionLayoutSubviews animations:^{
        View.alpha = 0.0f;
    } completion:^(BOOL finished) {
    }];
});

答案 5 :(得分:0)

又一个难题。在为约束设置动画时,可以在动画块外部设置新的约束常量,然后在动画内部调用layoutIfNeeded

对于视图Alpha,需要直接在动画块内设置这些视图。

更改此:

//setup position changes
myConstraint.constant = 10
myOtherConstraint.constant = 10
//whoops, alpha animates immediately
view.alpha = 0.5

UIView.animate(withDuration: 0.25) {
   //views positions are animating, but alpha is not   
   self.view.layoutIfNeeded()
}

//setup position changes
myConstraint.constant = 10
myOtherConstraint.constant = 10

UIView.animate(withDuration: 0.25) {
   view.alpha = 0.5
   self.view.layoutIfNeeded()
}