如何对简单的UIView动画执行操作

时间:2016-05-01 14:25:56

标签: ios swift animation uiimageview

直到几个星期前我才进行任何编码,虽然我自己取得了合理的进展,但我正在努力寻找一些我希望有人不介意帮助的事情。

我正在尝试为我的女儿在Swift中制作一个简单的应用程序(xCode版本7.3 - 7D175)。这是一系列动画,人物在月球陨石坑内上下弹出。

我希望能够做的是在按下一个动画UIImages时调用一个函数。理想情况下,我希望在按下动画时播放声音(我知道如何调用声音,但不是这样)

我创建了一个用于编写动画代码的类

  func alienAnimate() {

    UIView.animateWithDuration(0.3, delay: 0, options: [.CurveLinear, .AllowUserInteraction], animations: {
        self.center.y -= 135
             }, completion: nil)

    UIView.animateWithDuration(0.3, delay: 3, options: [.CurveLinear, .AllowUserInteraction], animations: {
        self.center.y += 135
            }, completion: nil)

    }

如果有人能指出我正确的方向,我会非常感激。我想可能有更好的动画制作方法,但这就是我目前所知道的。

编辑 - 5月2日

好的,所以我最终让它工作......好吧,差不多:)它仍然不能完全按照我的意愿工作,但我正在研究它。

动画基本上沿着一条路径垂直移动(所以外星人弹出就像他们从洞里出来一样)。下面的代码可以工作,但是当它有效地向下钻孔时,你仍然可以在它的路径开始处点击图像。

我仍然需要弄清楚如何点击它实际上现在的位置,而不能按其起点。

View of App

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let touch = touches.first
    let touchLocation = touch!.locationInView(self.view)
    if self.imgAlien.layer.presentationLayer()!.hitTest(touchLocation) != nil {
        sfxPop.play()

    } else if self.imgAlien.layer.presentationLayer()!.hitTest(touchLocation) != nil {
        sfxPop.play()
    } else if self.imgAlien2.layer.presentationLayer()!.hitTest(touchLocation) != nil {
        sfxPop.play()
    } else if self.imgAlien3.layer.presentationLayer()!.hitTest(touchLocation) != nil {
        sfxPop.play()
    } else if self.imgAlien4.layer.presentationLayer()!.hitTest(touchLocation) != nil {
        sfxPop.play()
    } else if self.imgAlien5.layer.presentationLayer()!.hitTest(touchLocation) != nil {
        sfxPop.play()
    } else if self.imgUFO.layer.presentationLayer()!.hitTest(touchLocation) != nil {
        sfxPop.play()

}

}

1 个答案:

答案 0 :(得分:1)

假设你的星球和动画可以按照你的意愿上下移动,你做的是检测触摸:

这只是一个例子:

var image : UIImage = UIImage(named:"alien.png")!
var image2 : UIImage = UIImage(named:"alienBoss.png")!
var alien1 = UIImageView(image: image)
var alien2 = UIImageView(image: image)
var alienBoss = UIImageView(image: image2)

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    let touch = touches.first as! UITouch
    if(touch.view == alien1){
        // User touch alien1, do whatever you want
    } else
    if(touch.view == alien2){
        // User touch alien2, do whatever you want
    } else
    if(touch.view == alienBoss){
        // User touch alienBoss, do whatever you want
    }
}

然后,您想要启用声音,以便您可以使用AVAudioPlayer库:

    import UIKit
    import AVFoundation

    class ViewController: UIViewController {

        var player:AVAudioPlayer = AVAudioPlayer()

override func viewDidLoad() {
        super.viewDidLoad()

        let audioPath = NSBundle.mainBundle().pathForResource("alienSound", ofType: "mp3")
        var error:NSError? = nil
}

您可以使用以下代码播放声音,停止,设置音量:

do {
    player = try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath!))
   // to play the mp3
   player.play()
   // to stop it
   player.stop()
   // to pause it
   player.pause()
   // to set the volume
   player.volume = 0.5  // from 0.0 to 1.0
   ...
}
catch {
    print("Something bad happened.")
}