当前位置: 首页 > 知识库问答 >
问题:

我如何使背景连续闪烁或闪烁,直到按钮再次按下,然后它会闪烁或闪烁2个新的随机颜色

单于庆
2023-03-14

我怎样才能使背景色在每次按下按钮时连续闪现2个新颜色?现在它只显示两种颜色,但它们不会连续闪烁或闪烁。

import UIKit

class ViewController: UIViewController {
    
    let colors: [UIColor] = [
        .systemYellow,
        .systemGreen,
        .systemPurple,
        .systemPink,
        .systemRed,
        .systemBlue,
        .systemOrange,
        .black,.gray
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .clear
    }
    
    @IBAction func didTapButton() {
        
        UIView.animate(withDuration: 1/2, delay: 0, options: .curveEaseOut, animations: {
            self.view.backgroundColor = self.colors.randomElement()
        }, completion: { finished in
            print("another animation! - 1")
            UIView.animate(withDuration: 1/2, delay: 0, options: .curveEaseOut, animations: {
                self.view.backgroundColor = self.colors.randomElement()
            }, completion: { finished in
                print("another animation! - 2")
            })
        })
    }
}

共有1个答案

西门安歌
2023-03-14

像这样的?

可以使用[.repeat,.autoreverse]选项重复和反转彩色动画。

然后,由于按钮是您正在动画的视图的子视图(在动画过程中,通常禁用视图及其子视图的用户交互),您可以添加.AllowUserInteraction选项以允许再次按下按钮。

@IBAction func didTapButton() {
    let color1 = self.colors.randomElement()
    let color2 = self.colors.randomElement()
    
    self.view.layer.removeAllAnimations()
    self.view.backgroundColor = color1 /// set to color1
    UIView.animate(withDuration: 1, delay: 0, options: [.repeat, .autoreverse, .allowUserInteraction]) {
        self.view.backgroundColor = color2 /// now animate to color2, reverse, then repeat
    }
}
 类似资料:
  • 这款应用目前以黑屏开始,当按下中间的按钮时,它会在每次按下按钮时改变背景颜色。但我希望应用程序闪烁或闪烁2种不同的颜色:而不是只显示一种不闪烁的颜色。

  • 这是因为在开发模式下,为了通过 Webpack 实现热加载,CSS代码是打包在 JavaScript 代码中,并动态打到页面中去,从而元素重绘引起了闪烁。 不用担心,在生产模式下,CSS代码会单独打包至独立的文件并置于head标签内,不会出现页面闪烁的现象。

  • 我有一个JTextField,如果它有无效内容,它就会被清除。我想背景闪烁红色一到两次,以表明用户,这已经发生了。我尝试过: 但它是红色的,时间很短,不可能被看到。有什么提示吗?

  • 我在Lollipop上的共享元素转换中看到了奇怪的事情。共享元素在开始动画之前闪烁(请看视频https://www.youtube.com/watch?v=DCoyyC_S-9A) 我不知道为什么会这样。但是,当我添加

  • 我试图用pyplay制作一个游戏,我几乎完成了,但我想让被画在墙上的盒子不闪烁,这些红色的盒子在整个游戏中闪烁,我不想让它们闪烁,最后,我在一个if条件下调用player碰撞函数,在这里每当我制作新的碰撞器时,我每次都要在if条件下添加函数,我想要的是碰撞器对象自动调用这个函数,而不需要我在if语句中为碰撞器的每个实例调用它对象。请指导我如何这样做。

  • 减低闪烁    以Interlace(交错扫描)方式在电视机输出PSP™规格软件的影像时,设定是否要减低画面的闪烁。 关 不减低画面的闪烁。 开 减低画面的闪烁。