swiftに関する質問です。
swift2.0で記載しております。
タイトルどおりですが下記コード用いてアニメーションのメソッドを連続で呼んでいます(画像を拡大、縮小する)。この状態でこの画像をremoveFromSuperview()で消した場合(imageRemove()を呼ぶ)にこのメソッド(animateImage)が無限に呼ばれCPUが100%になってしまいます。
下記コードの「//アニメーションストップ」部分は、もともと書いておらず、この部分に書けば良いのではないかと思ったのですがうまくいきませんでした。
「再帰的にメソッドを呼ばれないようにしながら画像を削除したい」がやりたいことです。
アドバイスをいただければ幸いです。
よろしくお願いいたします。
swift
1 2 3var checkView: UIImageView! 4 5override func viewDidLoad() { 6 super.viewDidLoad() 7 8 //imageの作成 9 checkView = UIImageView() 10 //使用する画像の名前 11 var checkImage = "Image.png" 12 //画像のセット 13 checkView.image = UIImage(named: checkImage)! 14 checkView.frame = CGRectMake(0 ,0 ,100 ,100) 15 //tag番号 16 checkView.tag = 1 17 //画像表示 18 self.view.addSubview(checkView) 19 //画像のアニメーションメソッドを呼ぶ 20 animateImage(checkView) 21} 22 23 24 func animateImage(target:UIView){ 25 print("アニメーションスタート") 26 27 // 拡大アニメーション 28 UIView.animateWithDuration(0.4,delay: 0.0, options : [UIViewAnimationOptions.CurveLinear, .AllowUserInteraction], animations: { () -> Void in 29 // 縮小用アフィン行列を作成. 30 target.transform = CGAffineTransformMakeScale(1.03, 1.03) 31 }) // 連続したアニメーション処理. 32 { (Bool) -> Void in 33 UIView.animateWithDuration(0.4,delay: 0.0, options : [UIViewAnimationOptions.CurveLinear, .AllowUserInteraction], animations: { () -> Void in 34 // 縮小用アフィン行列を作成. 35 target.transform = CGAffineTransformMakeScale(0.97, 0.97) 36 }) // 連続したアニメーション処理. 37 { (Bool) -> Void in 38 // 再度アニメーションを起動 39 self.animateImage(target) 40 } 41 } 42 43 } 44 45 //画像削除メソッド 46 func imageRemove(){ 47 // self.viewの上に乗っているオブジェクトを順番に取得 48 for v in view.subviews { 49 // オブジェクトの型がUIImageView型で、タグが1番〜100番のオブジェクトを取得 50 if let v = v as? UIImageView where v.tag >= 1 && v.tag <= 100 { 51 //アニメーションストップ 52 v.layer.removeAllAnimations() 53 // そのオブジェクトを親のviewから取り除く 54 v.removeFromSuperview() 55 } 56 } 57 } 58
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/11 15:48
2016/11/11 17:01 編集
2016/11/12 00:56
2016/11/12 02:55