0

我正在寻找一个UISwipeGestureRecognizer附加到我的 UIView 的。我想要实现的是允许用户在屏幕上滑动手指并设置屏幕的亮度。

这是我尝试过的:

- (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大于亮度,则亮度应该在移动开始后跳到刻度上的点。这几乎就是 a 的UISlider工作方式。您甚至不需要计算到起点的增量。

只有在deltaXX超过某个阈值后才能触发此操作。

于 2013-04-16T07:19:18.177 回答