Ios Swift-为动态创建的UIImageView设置动画

Ios Swift-为动态创建的UIImageView设置动画,ios,swift,uiimageview,uiimage,ios-animations,Ios,Swift,Uiimageview,Uiimage,Ios Animations,最初,我在制作一个UIImageView的动画时使用了这段代码。但后来我将其更改为对几个动态创建的UIImageView设置动画,但是由于它们是在for循环中动态创建的,因此我发现很难像对初始视图那样设置动画 override func viewDidLoad() { super.viewDidLoad() var sprite: UIImage = UIImage(named: "sprites/areaLocatorSprite.png")! var locati

最初,我在制作一个UIImageView的动画时使用了这段代码。但后来我将其更改为对几个动态创建的UIImageView设置动画,但是由于它们是在for循环中动态创建的,因此我发现很难像对初始视图那样设置动画

override func viewDidLoad() {
    super.viewDidLoad()

    var sprite: UIImage = UIImage(named: "sprites/areaLocatorSprite.png")!

    var locations:NSArray = animal[eventData]["locations"] as NSArray

    for var i = 0; i < locations.count; i++ {

        println(locations[i]["locationx"])
        var locationx = locations[i]["locationx"] as String
        var locationy = locations[i]["locationy"] as String

        let x = NSNumberFormatter().numberFromString(locationx)
        let y = NSNumberFormatter().numberFromString(locationy)
        let cgfloatx = CGFloat(x!)
        let cgfloaty = CGFloat(y!)

        var mapSprite: UIImageView
        mapSprite = UIImageView(image: sprite)

        mapSprite.frame = CGRectMake(cgfloatx,cgfloaty,10,10)
        townMap.addSubview(mapSprite)

        timer = NSTimer.scheduledTimerWithTimeInterval(0.35, target: self, selector: Selector("flash"), userInfo: nil, repeats: true)

    }

}

func flash() {
    var mapSprite:UIImageView?

    if mapSprite?.alpha == 1 {
        mapSprite?.alpha = 0
    } else {
        mapSprite?.alpha = 1
    }
}
这不起作用,因为flash函数中的mapSprite与for循环中的mapSprite不同。如何引用for循环中的一个,然后对其设置动画?或者,除了我目前正在做的事情,还有更好的选择吗

非常感谢

编辑
使用Xcode 6.2,您需要将视图存储到属性中,然后在每次触发计时器事件时枚举该属性

var sprites: [UIImageView]?

override func viewDidLoad() {
  super.viewDidLoad()

  var sprite = UIImage(named: "sprites/areaLocatorSprite.png")!

  var locations:NSArray = animal[eventData]["locations"] as NSArray

  self.sprites = map(locations) {
    var locationx = $0["locationx"] as String
    var locationy = $0["locationy"] as String

    let x = NSNumberFormatter().numberFromString(locationx)
    let y = NSNumberFormatter().numberFromString(locationy)
    let cgfloatx = CGFloat(x!)
    let cgfloaty = CGFloat(y!)

    var mapSprite = UIImageView(image: sprite)

    mapSprite.frame = CGRectMake(cgfloatx,cgfloaty,10,10)
    townMap.addSubview(mapSprite)

    return mapSprite
  }

  timer = NSTimer.scheduledTimerWithTimeInterval(0.35, target: self, selector: Selector("flash"), userInfo: nil, repeats: true)
}

func flash() {
  if let sprites = self.sprites {
    for sprite in sprites {
      sprite.alpha = sprite.alpha == 0 ? 1 : 0
    }
  }
}

你是想设置淡入淡出的动画,还是想让淡入淡出的画面突然闪开/闪开?@Paul.s只是想突然闪开/闪开我想我也应该提到我使用的是Xcode 6.2,因为guard是Swift2的新功能?我不得不用谷歌搜索一下guard是什么,然后for语句的布局出现了另一个问题,再次假设Swift2有新功能?此外,locations变量是一个NSArray,没有map成员;除非在Swift2中是这样?谢谢,我真的很感谢你的帮助!再次更新Swift 1感谢更新,但这次我有两个错误,第一个是“[UIImageView]”?没有名为“生成器”的成员,但在替换后已解决?具有第二个是“用括号括起来的语句块是一个未使用的闭包”和“预期{after if condition swift”,除非我这样做,但是func flash{if let sprites=self.sprites{}else{for sprite in sprites{sprite.alpha=sprite.alpha==0?1:0}我一直在尝试自己修复它,但似乎失败了。抱歉,再次感谢!!我通过执行以下操作修复了它-函数flash{if let sprites=self.sprites{用于精灵中的精灵{sprite.alpha=sprite.alpha==0?1:0}否则{用于精灵中的精灵{sprite.alpha=sprite.alpha==0?1:0}}}请将您的代码更新到此版本,或者更新为更好的版本,我会将其标记为正确答案:谢谢!很抱歉,从我从Swift 2转换为Swift 1时,该行中还有一个剩余内容,这会导致在手机上编辑的危险