2016-09-06 11 views
0

私のアプリは、1分に1回、その日の1分間に対応する写真で変更されるスライドショーです。私は現在、大規模な公開イベントで多くのデバイス上で行われるため、時間をチェックしてイメージを1秒ごとに更新しています。UIImageの現在の値を取得しようとしています

関連ビットは以下のとおりです。

@IBOutlet weak var theBrokenWatch: UIImageView! 

if theBrokenWatch.image != UIImage(named: theImageName as String) { 
    theBrokenWatch.image = getUncachedImage(named: theImageName) 
    print("changed image to", theCurrentTime as String) 
} 

func getUncachedImage (named name : String) -> UIImage? { 
    if let imgPath = NSBundle.mainBundle().pathForResource(name, ofType: nil) { 
      return UIImage(contentsOfFile: imgPath) 
    } 
    return nil 
} 

if文が動作しません。 imageNamed:を使用してイメージを設定していたときに機能しましたが、720枚の写真で大きなメモリ問題が発生しました。

イメージを変更する必要があるかどうかを確認するにはどうすればよいですか(つまり、現在の時刻として計算したものではないのですか)を確認するにはどうすればよいですか?

+1

実際にif文で何を確認していますか?私はそれがどんな場合でもうまくいくとは思わない。新しいUIImageオブジェクトをメモリ内の別の場所に作成しています。同じUIImageオブジェクトは、同じイメージであっても、以前作成したUIImageオブジェクトと同じではありません。 imagedNamedはイメージをキャッシュしていたために働いた可能性があります。 – Yan

+0

現在のイメージを変更する必要があるかどうかを確認しようとしていました。だから12:37に、画像は1236.jpgですか? contentsOfFileを使用すると、各UIImageがユニークでチェック不可能になりますか? TheBrokenWatch(画像が表示されている場所)が常に画像を取得する場所であれば、私はそれを確認できるはずはないと思いますか? – Richard

答えて

0

平等をチェックするためにキャッシュされていないイメージを使用する必要はありません。生成されるたびに、イメージオブジェクトは異なります(イメージデータは同じになりますが、ラッパーオブジェクトは再生成されるため、等しくはありません;イメージ等価は実際のビット内容に基づいていません)。

代わりに、イメージ名をキーオフします。新しいvar、imageNameを作成し、イメージを設定するときにそれを設定します。その後、あなたのタイマーが起動すると、新しいものに対してキャッシュされたimageNameをチェックし、異なる場合は.image varのみを変更します。

+0

これが修正され、私がやっていたことのいくつかが合理化されました。ありがとう! – Richard

関連する問題