2012-02-17 33 views
1

我有一個由120幀,512x512分辨率,保存爲32位PNG文件組成的循環動畫。我想在我的應用程序內的UIView中播放這個序列。任何人都可以給我一些關於如何做到這一點的指針,希望我可以使用標準API(我更喜歡)來做到這一點。如果需要的話,我可以使用Cocos2D,甚至可以使用OpenGL(但在這一點上我完全是OpenGL的新手)。在UIView中播放循環圖像序列

+1

將其轉換爲視頻,然後播放該視頻。 – 2012-02-17 15:26:47

回答

6

你可以試試這個:

// Init an UIImageView 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:/*Some frame*/]; 

// Init an array with UIImage objects 
NSArray *array = [NSArray arrayWithObjects: [UIImage imageNamed:@"image1.png"], [UIImage imageNamed:@"image2.png"], .. ,nil]; 

// Set the UIImage's animationImages property 
imageView.animationImages = array; 

// Set the time interval 
imageView.animationDuration = /* Number of images x 1/30 gets you 30FPS */; 

// Set repeat count 
imageView.animationRepeatCount = 0; /* 0 means infinite */ 

// Start animating 
[imageView startAnimating]; 

// Add as subview 
[self.view addSubview:imageView]; 

這是最簡單的方法,但我不能說表現什麼,因爲我還沒有嘗試過。我認爲它應該沒問題,儘管你有圖像。

+0

我想你會用盡內存來嘗試創建圖像數組。 – picciano 2012-02-17 18:02:14

+0

出於好奇,我做了一個小項目。我使用了120個PNG,每個都是512x512像素,大小約790KB,總共95MB。花了一些時間來加載,但後來運行得很好。嘗試在4.3模擬器,5.0模擬器和iPhone 4S上。模擬器甚至沒有顯示內存警告。 – iska 2012-02-17 19:13:48

+0

(例如)一個相對無負擔的4S的測試並不比較臃腫的4;我的幾個客戶的內存問題比以往任何時候都要糟糕。在提交這樣的解決方案之前,我建議在您的最低目標設備上嘗試此操作;例如,3G手機和2G觸摸,只有128MB內存,即使對於較新設備(3GS手機,4G觸摸)中的256MB,也要消耗大約95MB。 – AndrewS 2012-02-17 20:09:44

1

未壓縮,大約90MB的圖像,如果將它們解壓縮爲UIImage格式,可能與您正在查看的內容相同。由於動畫的長度和圖像的大小,我強烈建議將它們以壓縮的電影格式進行存儲。查看MediaPlayer框架的參考資料;您可以刪除播放控件,在您自己的視圖層次結構中嵌入MPMoviePlayerController,並將播放設置爲循環。請注意,640x480是H.264支持的上限,所以您可能需要縮小視頻。

請記住循環播放視頻的問題,如Smooth video looping in iOS中提到的問題。

+0

的確如此,但是如果他要經歷轉換成電影的麻煩,實現'MPMoviePlayer'並且可能縮放電影,他可以首先嚐試縮小圖像到所需的尺寸和/或壓縮它們,寫下7行代碼,看看會發生什麼;) – iska 2012-02-17 17:23:13

+0

@iska:同意,值得測試一個簡單的解決方案;看你的答案我的筆記。 – AndrewS 2012-02-17 20:10:32