7

我正在尝试将淡入淡出应用于我以编程方式在另一个顶部创建的 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 动画,它们通常以这种方式工作......

4

6 回答 6

7

尝试设置opaqueNO明确。我有同样的问题和解决我的问题的设置。显然,不透明的视图似乎不能很好地与 alpha 配合使用。

不过,归功于 Hampus Nilsson 的评论。

于 2014-12-28T20:52:19.633 回答
2
[UIView animateWithDuration:0.6 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
animations:^{
    [self.view setAlpha:0];
} 
completion:^(BOOL finished) {
    [self.view removeFromSuperview];
}];

这将正常工作,并且您的褪色效果会更好,因为options:UIViewAnimationOptionCurveEaseInOut.

于 2013-09-20T12:05:28.987 回答
2

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

dispatch_async(dispatch_get_main_queue(), ^{        
    [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionLayoutSubviews animations:^{
        View.alpha = 0.0f;
    } completion:^(BOOL finished) {
    }];
});
于 2016-09-15T12:56:24.073 回答
1

我遇到了确切的问题。就我而言,我一开始希望隐藏视图,所以我设置hiddentrue. 我认为更改alpha值会hidden自动更改属性,但事实并非如此。

因此,如果您希望首先隐藏视图,请将其设置alpha0.

于 2016-05-25T12:31:11.830 回答
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();
                    }
                }
            );
于 2016-07-14T10:54:37.987 回答
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()
}
于 2018-10-02T22:59:57.297 回答