我知道有更好的方法可以使用 CoreGraphics 来实现绘图工具,我正在使用这种 UIView 方法,因为我想实现像素化效果,并且我有一些其他自定义的东西很难做到内置CG代码。
我有一个 400 个 UIView 的网格来创建我的像素化画布......
用户选择一种油漆颜色并开始将他们的手指拖到 400 个 UIView 的画布上,因为他们的手指碰到一个 UIView,该 UIView 的颜色(又名像素)将更改为用户选择的颜色...
现在我已经编写了整个代码并且一切正常,但是它很滞后(因为我使用的是 touchesMoved)并且很多点都被跳过了...
我目前正在使用 touchesMoved 并将 UIView 移动到手指位置(我称之为fingerLocationRect
)。
当我更新一个像素的(400 个微型 UIView 中的 1 个)颜色时,我通过检查fingerLocationRect
我的 UIView 中的任何一个是否是交叉点来做到这一点。如果他们是我更新颜色。
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.view];
fingerLocationRect.center = CGPointMake(currentPosition.x, currentPosition.y);
int tagID = 1;
while (tagID <= 400) {
if(CGRectIntersectsRect(fingerLocationRect.frame, [drawingView viewWithTag:tagID].frame)) {
[drawingView viewWithTag:tagID].backgroundColor = [UIColor colorWithRed:redVal/255.f green:greenVal/255.f blue:blueVal/255.f alpha:1.f];
}
tagID ++;
}
}
问题是 touchesMoved 不经常更新......所以如果我在画布上拖动手指,只有 5 个像素发生变化,而不是我实际触摸的 40 个。
我想知道使用CGRectIntersectsRect
withtouchesMoved
是否是检测用户是否滑动 UIView 的最佳方法......现在它的更新速度不够快,我得到的是左边的结果而不是右边的结果。(如果我非常缓慢地移动手指,我只能达到右侧的效果......)
综上所述,是否有一种方法可以检测用户何时在 UIView 上滑动而不是使用touchesMoved
?如果没有,关于如何在 touchesMoved 返回的触摸位置之间获取所有 UIView 的任何想法?我让它们都有 1-400 的标签(第一行是 1-10,第二行是 11-21,等等)
Ps 如果 apanGestureRecognizer
更新比 a 更频繁touchesMoved
?
要了解 400 个 UIView 在这里的样子,它们都具有arc4random
基础颜色: