我正在创建一个附加到我的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
将是右侧的值正常化。
有什么建议吗?
答案 0 :(得分:1)
除非你有总数,否则你无法正常化。在这种情况下,这将取决于您的屏幕宽度。如果你在右边开始更多,让屏幕变得更亮,这是违反直觉的。最好确定亮度等级的任何点的等价物:
CGFloat width = self.view.bounds.size.width;
brightVal = position.x / width;
现在,如果startVal
大于亮度,亮度应该在移动开始后跳到刻度上的点。这几乎是UISlider
的工作原理。您甚至不需要计算起点的增量。
只有在deltaXX
超过某个阈值后,才能触发此操作。