2012-01-08 23 views
1

私が作成しているアプリケーションのタブの1つでは、uiscrollviewのサブビューであるuiimageviewがあります。私はuiimageビューの画像を変更するためのスイッチを備えた設定バンドルを持っており、マルチタスク後に画像を更新するのに問題があります。画像は変わりますが、ズームアウトするとバックグラウンドで前の画像を見ることができます。ここに私のコードは設定を変更した後にuiimageviewを更新する

- (void)viewDidAppear:(BOOL)animated 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    BOOL enabled = [defaults boolForKey:@"enableWinterSchedule"]; 

    if (enabled) { 
     UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"WinterSchedule.png"]]; 
     self.imageView = tempImageView; 
    } else { 
     UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"FallSpringSchedule.png"]]; 
     self.imageView = tempImageView; 
    } 
    scrollView.contentSize = CGSizeMake(imageView.frame.size.width , imageView.frame.size.height); 
    scrollView.maximumZoomScale = .75; 
    scrollView.minimumZoomScale = .37; 
    scrollView.clipsToBounds = YES; 
    scrollView.delegate = self; 
    [scrollView addSubview:imageView]; 
    scrollView.zoomScale = .37; 
    [super viewDidLoad]; 
    [imageView release]; 
} 
+0

ここではいくつかのことが既に間違っています:1)あなたの 'viewDidAppear'メソッドから' [super viewDidLoad] 'を呼び出さないでください。 #2)あなたの 'viewDidAppear'メソッドで' imageView'を作成しているとは思わないので、そこに 'imageView'を解放しないでください。 –

+0

しかし、好みを変更した直後にズームアウトしようとすると、前の画像がバックグラウンドで表示されます。私はviewDidLoadでそれを持っているとき私は完全にこの – slafor

答えて

0

であるあなたの問題は毎回viewDidAppear:実行すると、あなたはscrollviewに新しいImageViewのを追加しているということです。今は古いイメージの上に新しいイメージがあります。 viewDidAppear:は、ビューが画面に表示されるたびに(フォアグラウンドに戻ったときなど)実行されます。

この作業は、viewDidLoad(nibファイルビューの場合)またはloadView(nibファイル以外のビューの場合)で行います。

+0

をオフにしているビューを更新し、その後、私はビューを更新するたびに終了する必要があります再びアプリケーションを開こうとする私はSIGKILLを取得 – slafor

+0

いずれにせよSIGKILLを取得すべきではありません。あなたはSIGSEGVを手に入れていませんか?ビューの更新に関しては、コンテンツが変わるたびに 'imageView'の' image'を変更する必要があります。新しい 'imageView'を追加するべきではありません。 'viewWillAppear:'で画像を変更することができます。これを単純化するために、イメージビューを指し示すivarを保つべきです。 –

+0

あなたの助けていただきありがとうございます。私は設定を変更してアプリに戻り、毎回イメージを作成しません。唯一のことは、画像をタブに残して、プリファレンスを変更してアプリに戻ると、最初にタブを切り替えてリフレッシュする必要があることです。その問題を解決するためのヒント?私は前にapplicationdidbecomeactiveを使ってみましたが、あまり運がありませんでした。 – slafor

関連する問題