画像ファイルを数十枚使ってパラパラ漫画でアニメーションを作りたいと考えています。
おそらく UIImage(named: <string>) で画像ファイルを読み出しているため、アニメーション(リピート1回)が終了し、このいメージュビューを載せているViewControllerを破棄しても、メモリーが解放されません。
同様のViewControllerを3つほど用意しているため、アニメーションだけで約350MB程度メモリを消費し、ViewControllerを破棄しても解放されず、環境によってはアプリが落ちます。
Swift3で以下のようなコーディングしています。
//イメージビューの作成 let testImageView: UIImageView = UIImageView(frame: CGRect(x: 100, y: 100 , width: 100 , height: 100 )) // 配列をつくって、絵を複数入れる let animationSeq:[UIImage]? animationSeq = [ UIImage(named: "test0001.gif")!, UIImage(named: "test0002.gif")!, UIImage(named: "test0003.gif")!, UIImage(named: "test0004.gif")!, UIImage(named: "test0005.gif")!, UIImage(named: "test0006.gif")!, UIImage(named: "test0007.gif")!, UIImage(named: "test0008.gif")!, ・ ・ ・ UIImage(named: "test0065.gif")!, UIImage(named: "test0066.gif")!, UIImage(named: "test0067.gif")!, UIImage(named: "test0068.gif")!, UIImage(named: "test0069.gif")!, UIImage(named: "test0070.gif")! ] //初期設定の画像 testImageView.image = UIImage(named: "test0001.gif") // アニメーションの設定 testImageView.animationImages = animationSeq testImageView.animationDuration = 3 testImageView.animationRepeatCount = 1 // アニメーションを開始 testImageView.startAnimating()
他には
タイマーを使ってUIImageView.imageを置き換える方法でコーディングしてみましたが、UIImage(named:<string>)を使っているため結果は同じでした。
下記の記事を参考にはしましたが、解決できておりません。
https://yusks.wordpress.com/2010/11/10/uiimageimagenamed%E3%82%92%E4%BD%BF%E3%81%86%E4%B8%8A%E3%81%A7%E6%B0%97%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E3%81%93%E3%81%A8/
何か良い方法はないものでしょうか?
よろしくおねがいします。
=======================
<ViewControllerの破棄について追記>
追記のご依頼ありがとうございます。
testImageViewをプロパティにもつViewController(VC_C)を親のViewController(VC_P)で生成し、モーダルで表示しています。
testImageViewのアニメーション終了後にdelegateとして定義してあるViewController(VC_P)からdelegate関数を呼び出し。
その中で、
self.dismiss(animated: false, completion: {
testImageView = nil
}
として破棄しています。
破棄の確認として、ViewController(VC_C)にdeinit{}を定義して呼び出されていることは確認しています。
こちらで具体的な説明になっていますでしょうか?
理解不足などあるとは思いますが、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー