UISwipeGestureRecognizer控制亮度

时间:2013-04-16 06:38:08

标签: uiview uiswipegesturerecognizer

我正在创建一个附加到我的UIView的UISwipeGestureRecognizer。我想要达到的目的是让用户在屏幕上滑动手指并设置屏幕的亮度。

以下是我的尝试:

- (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将是右侧的值正常化。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

除非你有总数,否则你无法正常化。在这种情况下,这将取决于您的屏幕宽度。如果你在右边开始更多,让屏幕变得更亮,这是违反直觉的。最好确定亮度等级的任何点的等价物:

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

现在,如果startVal大于亮度,亮度应该在移动开始后跳到刻度上的点。这几乎是UISlider的工作原理。您甚至不需要计算起点的增量。

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