[英]how to make a UIImageView tappable while it is animating across the screen
I have a for in loop that generates dot images which move across the screen. 我有一个for循环,生成在屏幕上移动的点图像。 I have no idea where or how to implement a tap gesture recognizer that would be applied to all of the dots that are being generated and be able to make them dissapear when they get tapped as they are moving/animating.
我不知道在哪里或如何实现一个点击手势识别器,它将应用于正在生成的所有点,并且当它们在移动/动画时被轻拍时能够使它们消失。 Please help me out!
请帮帮我! Thank you!
谢谢!
@IBAction func animateButton(sender: AnyObject) {
self.view.userInteractionEnabled = true
// Declare delay counter
var delayCounter:Int = 100000
var durationCounter:Double = 0
// loop for 1000 times
for loopNumber in 0...1000 {
// set up some constants for the animations
let dotDuration:Double = 4 - durationCounter
let redDelay = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 25000
let blueDelay = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 25000
let yellowDelay = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 25000
let greenDelay = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 25000
let options = UIViewAnimationOptions.AllowUserInteraction
//set up some constants for the dots
let redSize:CGFloat = 54
let redYPosition : CGFloat = CGFloat( arc4random_uniform(275)) + 54
let blueSize:CGFloat = 54
let blueYPosition : CGFloat = CGFloat( arc4random_uniform(275)) + 54
let yellowSize:CGFloat = 54
let yellowYPosition : CGFloat = CGFloat( arc4random_uniform(275)) + 54
let greenSize:CGFloat = 54
let greenYPosition : CGFloat = CGFloat( arc4random_uniform(275)) + 54
// create the dots and add them to the view
let redDot = UIImageView()
redDot.image = UIImage(named: "Red Dot")
redDot.frame = CGRectMake(0-redSize, redYPosition, redSize, redSize)
self.view.addSubview(redDot)
let blueDot = UIImageView()
blueDot.image = UIImage(named: "Blue Dot")
blueDot.frame = CGRectMake(0-blueSize, blueYPosition, blueSize, blueSize)
self.view.addSubview(blueDot)
let yellowDot = UIImageView()
yellowDot.image = UIImage(named: "Yellow Dot")
yellowDot.frame = CGRectMake(0-yellowSize, yellowYPosition, yellowSize, yellowSize)
self.view.addSubview(yellowDot)
let greenDot = UIImageView()
greenDot.image = UIImage(named: "Green Dot")
greenDot.frame = CGRectMake(0-greenSize, greenYPosition, greenSize, greenSize)
self.view.addSubview(greenDot)
// define the animations
UIView.animateWithDuration(dotDuration , delay: redDelay, options: options, animations: {
redDot.frame = CGRectMake(675, redYPosition, redSize, redSize)
}, completion: { animationFinished in redDot.removeFromSuperview() })
UIView.animateWithDuration(dotDuration , delay: blueDelay, options: options, animations: {
blueDot.frame = CGRectMake(675, blueYPosition, blueSize, blueSize)
}, completion: { animationFinished in blueDot.removeFromSuperview() })
UIView.animateWithDuration(dotDuration , delay: yellowDelay, options: options, animations: {
yellowDot.frame = CGRectMake(675, yellowYPosition, yellowSize, yellowSize)
}, completion: { animationFinished in yellowDot.removeFromSuperview() })
UIView.animateWithDuration(dotDuration , delay: greenDelay, options: options, animations: {
greenDot.frame = CGRectMake(675, greenYPosition, greenSize, greenSize)
}, completion: { animationFinished in greenDot.removeFromSuperview() })
// FAILED ATTEMPT
var tapDot:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dotTapped")
// FAILED ATTEMPT
redDot.addGestureRecognizer(tapDot)
// FAILED ATTEMPT
func dotTapped (recognizer: UITapGestureRecognizer) {
redDot.alpha = 0
}
durationCounter+=0.05
delayCounter+=50000
}
}
dotTapped
method should be outside your animateButton
method. dotTapped
方法应该在animateButton
方法之外。 userInteractionEnabled
is true for the UIImageView
s. UIImageView
的userInteractionEnabled
为true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.