直到几个星期前我才进行任何编码,虽然我自己取得了合理的进展,但我正在努力寻找一些我希望有人不介意帮助的事情。
我正在尝试为我的女儿在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日
好的,所以我最终让它工作......好吧,差不多:)它仍然不能完全按照我的意愿工作,但我正在研究它。
动画基本上沿着一条路径垂直移动(所以外星人弹出就像他们从洞里出来一样)。下面的代码可以工作,但是当它有效地向下钻孔时,你仍然可以在它的路径开始处点击图像。
我仍然需要弄清楚如何点击它实际上现在的位置,而不能按其起点。
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()
}
}
答案 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.")
}