0

UIView を作成し、その alpha プロパティを変更してバックライトの変化をシミュレートしようとしています。これが私のコードです

    TransparentView = [[UIView alloc] initWithFrame:self.view.bounds];
    TransparentView.backgroundColor = [UIColor whiteColor];
    self.view = TransparentView;

    TransparentView.alpha = 0.2; 
    float step = 1.0 / ( appDelegate.OnOffTime * 100);
    for (float f = 0; f < 1; f=f+step) {
        TransparentView.alpha = (CGFloat)(1 - f);
        [NSThread sleepForTimeInterval:0.01];
}

TransparentView.alpha = 0.2と の両方TransparentView.alpha = (CGFloat)(1 - f)が変更されますTransparentView.alphaが、実際のデバイスの「明るさ」のみTransparentView.alpha = 0.2が変更されます。何が間違っていますか?

4

3 に答える 3

3

問題は、スレッドをスリープ状態にしていて、実際に非同期タイマーを設定していないことだと思います。これが意味することは、実際には、実行ループが画面上で変更を行うことを回避していないということです。これは、1 に戻るまでこのループを終了しないためです :-)

編集:明確にするために:

UI に加えた変更は、メソッドが戻る必要がある実行ループが「戻る」まで、実際には描画されません。このオブジェクトでアルファをインクリメントするメソッドを呼び出すように構成された NSTimer インスタンスが必要になる可能性があります (そして、目的の値に対してアルファをチェックし、到達するとタイマーを無効にします)。

于 2012-07-07T15:59:36.040 に答える
2

組み込みの UIView アニメーション サポートを使用するようにコードを変更することを検討してください。これにより、ビューが更新され、メイン スレッドがスリープしていないことが保証されます。アニメーションの完了後に何か特別なことをする必要がある場合は、メソッドのcompletion:バージョンを使用できます。

TransparentView.alpha = 0.2;
[UIView animateWithDuration: appDelegate.OnOffTime animations:^{
    TransparentView.alpha = 0.0;
}];
于 2012-07-07T20:03:27.040 に答える
1

アルファと輝度は、ビューの 2 つの異なる概念です。ディスプレイの輝度を本当に変更したい場合は、iOS 5+ を使用できます。それ以外の[[UIScreen mainScreen]brightness];場合、アルファの変更は黒い背景に対して行う必要があり、キャスト 1 フロートなどの奇妙な数値を使用しないでください。私の賭けは、あなたの小さなアルゴリズムが十分に大きなステップ係数を返しているため、ビューが1を超えるアルファ値を表示するように指示されていることです(とにかくデフォルトで1になります)。

于 2012-07-07T15:47:40.887 に答える