1

ここでは基本的に画面調光器を作成しています。画面に黒いビューを配置し、UIPanGestureRecognizer を使用して、ユーザーが上下にスクロールするかどうかに基づいて不透明度を調整しています。コードは次のとおりです。

- (IBAction)dimScreen:(UIPanGestureRecognizer *)sender {
    //Get translation
    CGPoint translation = [sender translationInView:self.view];
    CGFloat distance = translation.y;

    //add a fraction of the translation to the alpha
    CGFloat newAlpha = self.blackScreen.alpha + distance/self.view.frame.size.height;
    //check if the alpha is more than 1 or less than 0
        if (newAlpha>1) {
        newAlpha = 1;
        }else if (newAlpha<0.0){
        newAlpha = 0.0;
        }
    self.blackScreen.alpha = newAlpha;
    //reset translation to get incremental change
    [sender setTranslation:CGPointZero inView:self.view];
}

下にパンすると、不透明度は 1.0 になり、まだ調整できます。不透明度が 0 になるまでパンすると、まったくパンできなくなります。dimScreen: セレクターが呼び出されなくなります。誰でもこの問題の原因を説明できますか?

4

1 に答える 1

1

アルファ値が 0 のビューは、タッチを受けなくなりました。実際、0.011 アルファを下回ると、ビューはタッチの受信を停止するようです。そのため、else-if ステートメントの値を変更することで、コードを機能させることができます。

if (newAlpha>1) {
        newAlpha = 1;
    }else if (newAlpha <= 0.011){
        newAlpha = 0.011;
    }

私が経験的に見つけた 0.011 ではなく、0.02 の値について他の人が言及しているのを見たことがあります。これらの数値のいずれかが修正され、将来も機能し続けると想定することがどれほど「安全」かはわかりませんが、今のところ機能しているようです.

于 2013-07-24T05:45:03.007 に答える