2015-04-05 78 views
0

我正在尋找iPhone上的一系列圖像的動畫。圖像以連續順序命名(image1,image2,image3等)。我正在尋找最佳的方式來動畫這些圖像,而不必將它們放入數組中。從uiimageview.animationimages中移除圖像 - iPhone/Swift

我有多組圖像將隨機選擇。每個圖像集都是〜100幀,所以當應用程序啓動時將所有這些放在數組中,意味着有大約1000張圖像坐在內存中。

除了使用如此多的內存之外,不斷更新UIImage.animationImages可能需要比我想要的更長的時間來處理此大小的數組。我想我要的是類似於手錶套裝了,它可以讓你「setImageNamed(),然後startAnimatingWithImagesInRange東西()

編輯:

很抱歉,如果我最初的職位是我試圖避免爲此發佈代碼,因爲我已經用Xcode以10種不同的方式嘗試了這些代碼,但其中的任何一個都不能正常工作,我已經在下面發佈了我的代碼,而我的問題這是因爲每當我嘗試清除它們時,內存都會繼續充滿每次我設置的動畫和數組時,內存會繼續充滿。對於它的價值,我真的很新,所以我希望我錯過了一些非常明顯的東西,但我確實在我到這裏或其他任何地方之前試着自己想出來,這是唯一的解決辦法阿爾恩。

@IBOutlet weak var imageViewOutlet: UIImageView! 

var phaseArray: [UIImage] = [] 
var optionArray: [UIImage] = [] 
var outroArray: [UIImage] = [] 
var randomOption32: UInt32 = 1 
var randomOption = 1 
var buttonPressed = false 

@IBAction func testButton(sender: AnyObject) { 

    if buttonPressed == false { 

     fillPhaseArray() 
     fillOptionArray() 
     fillOutroArray() 
     imageViewOutlet.animationImages = phaseArray + optionArray + outroArray 
     imageViewOutlet.animationRepeatCount = 1 
     imageViewOutlet.startAnimating() 

     buttonPressed == true 

    } else { 

     clearArrays() 
     fillOptionArray() 
     fillOutroArray() 
     imageViewOutlet.animationImages = phaseArray + optionArray + outroArray 
     imageViewOutlet.animationRepeatCount = 1 
     imageViewOutlet.startAnimating() 

    } 


} 




func fillPhaseArray() { 

    for var i = 1; i <= 65; i++ { 

     phaseArray.append(UIImage(named: "phase1_\(i)")!) 

    } 

} 

func fillOptionArray() { 

    randomOption32 = arc4random_uniform(UInt32(15)) 
    randomOption = Int(randomOption32) 

    for var i = 1; i <= 14; i++ { 

     optionArray.append(UIImage(named: "option_\(randomOption)\(i)")!) 

    } 
} 

func fillOutroArray() { 

    for var i = 1; i <= 11; i++ { 

     outroArray.append(UIImage(named: "outro_\(randomOption)\(i)")!) 
    } 

} 


func clearArrays() { 

    optionArray.removeAll(keepCapacity: true) 
    optionArray = [] 
    outroArray.removeAll(keepCapacity: true) 
    outroArray = [] 
    imageViewOutlet.animationImages?.removeAll(keepCapacity: false) 
    imageViewOutlet.animationImages = [] 

} 

這幾乎是我的整個viewController.swift。

編輯:

所以,事實證明,我的真正的問題不是該數組但iOS的使用命名的圖像時,緩存圖像的方式。我已經轉向使用imagewithcontentsoffile,這似乎適用於大多數人,它確實有幫助,但並沒有完全解決我的問題。我一次添加大約100張圖像的數組,以便uiimageview.animation圖像。這部動畫將會播放並與另外100張圖像快速交換出來,但我無法清除動畫圖像,因此無論我多麼努力地清除動畫圖像,每次添加一個新數組時,它都會附加到舊數組上。

回答

0

我不確定你到底想要什麼,但也許這段代碼可以幫助你。我像你想要的連續順序添加3圖像,

var myImage = UIImage(named: "image\(i).jpg") 

與這條線,我可以訪問我的圖像,而無需放入一個數組。我想你也可以訪問動畫。

以下是完整的代碼。

override func viewDidLoad() { 
       var x = 50 
       super.viewDidLoad() 
       for(var i = 0; i < 4; ++i){ 
        var cgfloatx = CGFloat(x) 
        var myImage = UIImage(named: "image\(i).jpg") 
        var myImageView = UIImageView(frame: CGRectMake(100, 100 + cgfloatx, 90, 90)) 
        myImageView.image = myImage 
        self.view.addSubview(myImageView) 
        x += 100 
       } 
      } 

我希望我理解你的問題是正確的,但下一次,嘗試通過編碼做一些事情,然後問這裏有什麼錯在我的代碼。就像提問類似的問題,我得到了很多負面的觀點。

+0

感謝您的幫助。我將試驗你的代碼,並試圖更好地理解它是如何工作的,看看它如何幫助我。我也很欣賞關於我的帖子的提示。我想包括我最初的代碼,但是在試圖通過大約10-15次不同的嘗試來解決這個問題後,它變成了一場噩夢。我甚至不知道哪一個最接近那個點。希望我最近對我的帖子進行的編輯會有所幫助。 – kShmoove 2015-04-06 23:54:54

+0

我無法獲得上面的代碼來完成我的目標。我想讓圖像停留在屏幕中間,並一次更新一幀。此代碼移動了我的圖像。即使消除x值的變化,它也不會在適當的位置生成動畫,它只是發生得太快而立即顯示動畫中的最後一個圖像。我與NSTimer混爲一談,但我對運行這樣的動畫的計時器並沒有太大的運氣,我覺得有一種更好的方法來做這樣的簡單動畫。有了這個說法,我感謝你的建議,它教會了我一些新的東西。 – kShmoove 2015-04-07 03:08:06