更stream畅的写意体验(iOS)

我正在做一个math相关的活动,在这个活动中,用户可以用他们的手指来画画,因为他们试图解决math问题。 但是,我注意到,当我快速移动手指时,线条稍微滞后于我的手指。 我想知道是否有一些地方因为演出或者触动移动而变得不够用(如果不能快速移动的话,这是非常顺利和美妙的)。 我正在使用UIBezierPath 。 首先,我使用init方法创build它,如下所示:

 myPath=[[UIBezierPath alloc]init]; myPath.lineCapStyle=kCGLineCapSquare; myPath.lineJoinStyle = kCGLineJoinBevel; myPath.lineWidth=5; myPath.flatness = 0.4; 

然后在drawRect中:

 - (void)drawRect:(CGRect)rect { [brushPattern setStroke]; if(baseImageView.image) { CGContextRef c = UIGraphicsGetCurrentContext(); [baseImageView.layer renderInContext:c]; } CGBlendMode blendMode = self.erase ? kCGBlendModeClear : kCGBlendModeNormal; [myPath strokeWithBlendMode:blendMode alpha:1.0]; } 

baseImageView是我用来保存结果,所以我不必画很多path(一段时间后变得非常慢)。 这是我的触摸逻辑:

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; [myPath moveToPoint:[mytouch locationInView:self]]; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; [myPath addLineToPoint:[mytouch locationInView:self]]; [self setNeedsDisplay]; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0f); CGContextRef c = UIGraphicsGetCurrentContext(); [self.layer renderInContext:c]; baseImageView.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [myPath removeAllPoints]; [self setNeedsDisplay]; } 

该项目将作为企业应用程序发布,因此只能安装在iPad 2上。目标iOS为5.0。 任何build议,如何能挤出更多的速度,这将不胜感激。

当然,你应该开始在仪器下运行,并寻找你的热点。 然后,您需要进行更改并重新评估以查看其影响。 否则,你只是猜测。 这就是说,从经验中得到一些说明:

  • 将大量元素添加到path可能会非常昂贵。 如果你的addLineToPoint:结果是一个热点,我不会感到惊讶。 这一直是我的。
  • 而不是用UIImageView支持你的系统,我可能会渲染成一个CGLayer。 CGLayers针对特定的上下文进行了优化。
  • 为什么要积累path,而不是在每一步将其渲染到图层中? 这样你的path永远不会超过两个元素(move,addLine)。 通常使用两阶段的方法,所以你可以处理撤消或类似的。
  • 确保你关掉了任何你不想要的UIBezierPathfunction。 具体来说,请查看文档中的“访问绘制属性”部分。 您可以考虑切换到CGMutablePath而不是UIBezierPath。 configuration相同的时候速度并不快,但是默认设置会closures更多的东西,所以默认情况下会更快。 (你已经完成了其中的大部分工作,你要在乐器上做一些实验,看看它们会产生什么样的影响。)

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_freehand-drawing/

这个链接正好显示了如何使曲线更平滑。 本教程一步一步展示。 并简单地告诉我们如何在曲线中添加一些中间点(touchesMoved方法)以使它们更平滑。