3

メイン ビューとモーダル ビューを備えたキオスク アプリケーションを作成し、画像カルーセルをスクリーンセーバーとして使用しました。このモーダル ビューは、画面に触れるたびに下にスライドします。

アプリを実行したままデバイスを非常に長い時間 (一晩) 放置すると、スクリーンセーバーのモーダル アニメーションが消えたときに画面の再描画の問題が発生します。メイン画面の背景画像がどこにあるのか、OSには何も描画されていないようです。メイン画面のコントロールとテキストは本来あるべきように描画され、背景画像のみがモーダルからの非表示アニメーションのアーティファクトに置き換えられます。これは 2 つのデバイス (iPad 2 3G 16GB) で発生します。これは、アプリが長時間実行されている場合にのみ発生し、画面がオンになっているかどうかは関係ありません。問題の背景 UIImageView は、「画像」以外のプロパティが変更されていないバニラ UIImageView です。

次のようになります (クライアントのロゴと一部のテキストがぼやけています): http://tinypic.com/view.php?pic=2qx47bt&s=6

何が間違っている可能性があり、それを修正する方法はありますか?

編集:スクリーンセーバーを非表示にするコードは次のとおりです。非常に標準的で、ぼんやりしていません。

- (void)hideScreenSaver {
    dispatch_async(dispatch_get_main_queue(), ^{
        if (![[[self mainViewController] presentedViewController] isKindOfClass:[UINavigationController class]]) {
            [[self mainViewController] dismissModalViewControllerAnimated:TRUE];
        }
    });
}

スクリーンセーバーViewController は - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions (メインスレッド内) で作成されます。

[[GMAppManager sharedManager] setScreenSaverViewController:[[AAScreenSaverViewController alloc] initWithNibName:@"AAScreenSaverViewController" bundle:nil]];
4

2 に答える 2

2

`私はこの問題を絶対に抱えていました。それは単にuikitリソースのリークでした. ビルドを実行し、リークを分析して修正します。また、すべての dealloc にブレーク ポイントを設定し、それらが呼び出されていることを確認します。クラスの一部への参照が 1 つでも保持され、解放されない場合、dealloc は呼び出されません。パラメータ:self を渡すすべてのオブジェクトもチェックしてください。self を使用するオブジェクトが解放されていない場合、これらの self への参照も dealloc をブロックします。ループがタイトな場合、自動解放プールは排出されません。明示的なリリースを使用してみてください。デリゲートは保持するのではなく、割り当てる必要があります。

さらにいくつかのエラーと質問を投稿して、見てみましょう。あなたはクールなプロジェクトを持っています。

于 2013-04-12T05:08:21.120 に答える
2

あなたが言う時

問題の背景 UIImageView は、「画像」以外のプロパティが変更されていないバニラ UIImageView です。

UIImageView変更する前に、まずそれをクリアしていることを確認できますかImage

きっと知っているはずです。しかし、念のため、試してみてください:

youeImageView.image = nilそして、他の画像を設定しますか?

あなたが提供した画像を見ると、理由は他にないようです。

于 2013-04-12T05:47:59.797 に答える