0

UISwipeGestureRecognizerUIView に添付されるを作成しようとしています。私が達成したいことは、ユーザーが画面上で指をスワイプして画面の明るさを設定できるようにすることです。

これが私が試みたものです:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint currentPosition = [touch locationInView:self.view];

    CGFloat deltaXX = (startPoint.x - currentPosition.x);

    float brightVal;

    if (deltaXX > 0) {
        brightVal = [[UIScreen mainScreen] brightness] / ((startPoint.x / deltaXX) * 1.0);
    } else {
        brightVal = [[UIScreen mainScreen] brightness] - ((startPoint.x / deltaXX) * 1.0);
    }

    NSLog(@"%f", brightVal);
    [[UIScreen mainScreen] setBrightness:brightVal];
}

ただし、これは正しく機能していないようです。画面の右端で、ユーザーは明るさをすばやく調整できます。

1.0問題は、左側と右側の値を正規化する方法がわからないことだと思います0.0

助言がありますか?

4

1 に答える 1

1

合計がなければ正規化できません。この場合、これは画面の幅によって異なります。右側から始めると、画面がより速く明るくなるというのは直感に反します。輝度スケールに相当する任意の点を決定することをお勧めします。

CGFloat width = self.view.bounds.size.width;
brightVal = position.x / width; 

が明るさよりも大きい場合startVal、明るさは移動開始後にスケール上のポイントにジャンプする必要があります。これはほとんどどのように機能するかUISliderです。開始点までのデルタを計算する必要さえありません。

deltaXXが特定のしきい値を超えた後にのみ、これをトリガーすることができます。

于 2013-04-16T07:19:18.177 に答える