2015-09-22 84 views
0

最初我有這個代碼工作,當我只是動畫我有一個UIImageView。但後來我改變它動畫動畫創建的幾個UIImageViews,但是因爲它們是在for循環內動態創建的,所以我發現很難爲它們製作動畫,就像我最初做的那樣。Swift - Animate動態創建的UIImageView

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

+0

時間枚舉屬性您打算動畫褪色或你想讓它突然閃爍開/關? –

+0

@ Paul.s只是想突然閃爍開/關 – Javz

回答

0

您需要存儲的意見,到屬性,然後每個定時器事件被觸發

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 
    } 
    } 
} 
+0

我想我也應該提到我使用Xcode 6.2作爲守衛是Swift2的新東西?由於我不得不穀歌的防守,然後又有了與陳述佈局有關的另一個問題,又再次假設了Swift2的新內容?位置變量也是一個NSArray並且沒有地圖成員;除非在Swift2中它呢?謝謝,我非常感謝幫助! – Javz

+0

再次更新爲Swift 1 –

+0

感謝您的更新,但這次我有兩個錯誤,第一個是'[UIImageView]?沒有名爲Generator的成員,但在更換後解決?與! 其次是'支撐的語句塊是一個未使用的閉包'和'預期{如果條件迅速後' 除非我這樣做,但它不起作用 func flash(){ 如果讓sprites = self.sprites {}其他{ for sprite中的精靈{sprite.alpha = sprite.alpha == 0? 1:0 } } } 我一直在嘗試修復它,但似乎我失敗了。對不起,再次感謝! – Javz