以编程方式使用Swift闪烁屏幕(在'截图中截取')

时间:2015-02-23 22:15:46

标签: ios flash swift screenshot

为了从这里转换Objective C示例:How to flash screen programmatically?我编写了以下代码:

func blinkScreen(){
    var wnd = UIApplication.sharedApplication().keyWindow;
    var v = UIView(frame: CGRectMake(0, 0, wnd!.frame.size.width, wnd!.frame.size.height))
    wnd!.addSubview(v);
    v.backgroundColor = UIColor.whiteColor()
    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(1.0)
    v.alpha = 0.0;
    UIView.commitAnimations();
}

但我不知道应该在哪里添加 UIView v 删除代码(在动画结束时执行的某些事件......但是如何?)。另外 - 我的转换是否正确?

2 个答案:

答案 0 :(得分:9)

你接近解决方案。但是你可以使用swift中的completion-blocks让它更容易:

if let wnd = self.view{

    var v = UIView(frame: wnd.bounds)
    v.backgroundColor = UIColor.redColor()
    v.alpha = 1

    wnd.addSubview(v)
    UIView.animateWithDuration(1, animations: {
        v.alpha = 0.0
        }, completion: {(finished:Bool) in
            println("inside")
            v.removeFromSuperview()
    })
}

如您所见,首先我检查是否有视图然后我只是将视图的边界设置为flash视图。一个重要的步骤是设置背景颜色。否则你将看不到任何闪光效果。我已将backgroundColor设置为红色,以便您在示例中更容易看到它。但你当然可以使用任何颜色。

然后,乐趣从UIView.animateWithDuration部分开始。如您所见,我已用块替换了您的startAnimation等代码。它读起来像这样: 首先,将动画持续时间设置为1秒。之后,通过将alpha设置为0来启动动画。然后,在动画完成后,我从其超级视图中删除视图。

这就是重现屏幕截图效果所需的一切。

答案 1 :(得分:0)

UIView提供类方法来设置动画委托,并为动画开始时提供选择器,并完成。

使用方法:

setAnimationDelegate(delegate:)
setAnimationWillStartSelector(selector:)
setAnimationDidStopSelector(selector:)

或者,查看UIView动画方法,它允许您提供将在完成时调用的闭包:

animateWithDuration(duration: delay: options: animations: completion:)

在为didStopSelector提供的函数中,您可以删除UIView。