objective-c - 按顺序更改 UIView 的属性,但没有动画?

标签 objective-c ios animation xamarin.ios

我想创建一个闪烁效果,类似于打开荧光灯。该序列大约需要 2 秒。因为它在黑色背景上(图像是白色的),所以我可以按如下顺序调整 alpha:

0.5sec   Alpha = 1.0;
0.15sec  Alpha = 0.0;
0.4sec   Alpha = 1.0;
0.35sec  Alpha = 0.0;
0.3sec   Alpha = 1.0;
0.1sec   Alpha = 0.0;
~        Alpha = 1.0;

此时,alpha 为 1.0,我想将其留在那里。问题是我不能只更改这些值,因为它们只会排队等待绘制并且不会立即发生,相反它们会在下次绘制 UI 时立即发生,让我没有闪烁效果。

我也不能使用 UIView.animate block ,因为这将在指定的时间内对 View 的 alpha 进行补间/动画处理,我不希望它平滑,我希望它在 alpha 级别之间立即闪烁。

我可能会使用 UIImageView 图像帧动画,但想知道是否有更清洁、更快、更简单的方法?

最佳答案

使用 NSTimer。这就是我要做的(伪代码):

timer = new scheduledTimer(0.5 seconds) selector:flicker() repeats:YES;
timeSpent = 0;

    flicker()
    {
        timeSpent+= 5;
        switch(seconds)
             case 5: alpha = 1.0; break;
             case 15: alpha = 0.0; break;
    ...
        case 120: alpha = 1.0; [timer invalidate]; break;

    }

如果你有一些闪烁的模式,你可以做一些比长开关更好的东西,也许只是像 if (timeSpent % 5 == 0) { alpha = 1.0; } 否则 { 阿尔法 = 0.0; }

编辑:这样的事情怎么样:

CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath: @"opacity"];
    animation.duration = 0.7f;
    animation.values   = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:1.0f],
                          [NSNumber numberWithFloat:1.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:1.0f],

                          [NSNumber numberWithFloat:1.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:1.0f],
                          [NSNumber numberWithFloat:1.0f],

                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:0.0f],
                          [NSNumber numberWithFloat:1.0f],
                          nil];
    animation.keyTimes = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.1f],
                          [NSNumber numberWithFloat:0.2f],
                          [NSNumber numberWithFloat:0.2f],
                          [NSNumber numberWithFloat:0.3f],
                          [NSNumber numberWithFloat:0.3f],

                          [NSNumber numberWithFloat:0.4f],
                          [NSNumber numberWithFloat:0.4f],
                          [NSNumber numberWithFloat:0.5f],
                          [NSNumber numberWithFloat:0.5f],
                          [NSNumber numberWithFloat:0.6f],

                          [NSNumber numberWithFloat:0.6f],
                          [NSNumber numberWithFloat:0.7f],
                          [NSNumber numberWithFloat:0.7f],
                          nil];    

    [self.view.layer addAnimation:animation forKey:nil];   

关于objective-c - 按顺序更改 UIView 的属性,但没有动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611464/

相关文章:

objective-c - 如何获取 OSX 上当前工作区/屏幕壁纸的路径?

ios - 如何在核心数据中持久化 NSMutableArray?

objective-c - Finder 脚本桥接关闭

javascript - 如何在滚动时填充 svg

iphone - 根据多个属性对NSArray进行排序

ios - 如何将应用内购买添加到 iOS 应用程序?

ios - ABPeoplePickerNavigationController 慢吗?

ios - 图像未从 objective-c 中的 sql 数据库中检索

css - 带有 css 动画的 Div 在 Chrome 中特别显示

html - 在滚动条上可见时运行 css 动画