OStack程序员社区-中国程序员成长平台

标题: ios - 更流畅的手绘体验(iOS) [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 21:12
标题: ios - 更流畅的手绘体验(iOS)

我正在制作一个与数学相关的事件,用户可以在其中尝试解决数学问题时用手指绘制草图。但是,我注意到当我快速移动手指时,线条明显滞后于我的手指。我想知道是否有一些地方我忽略了性能,或者 touchesMoved 只是不够(如果你不快速移动,它会非常流畅和美妙)。我正在使用 UIBezierPath。首先,我在我的 init 方法中创建它,如下所示:

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

然后在drawRect中:

- (void)drawRectCGRect)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 是我用来保存结果的,这样我就不必绘制很多路径(一段时间后变得非常慢)。这是我的触摸逻辑:

-(void)touchesBeganNSSet *)touches withEventUIEvent *)event
{

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    [myPath moveToPoint:[mytouch locationInView:self]];

}
-(void)touchesMovedNSSet *)touches withEventUIEvent *)event
{    
    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    [myPath addLineToPoint:[mytouch locationInView:self]];
    [self setNeedsDisplay];
}

-(void)touchesEndedNSSet *)touches withEventUIEvent *)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。任何有关如何提高速度的建议都将不胜感激。



Best Answer-推荐答案


当然,您应该首先在 Instruments 下运行它并寻找您的热点。然后您需要进行更改并重新评估以查看其影响。否则你只是在猜测。也就是说,一些经验笔记:

关于ios - 更流畅的手绘体验(iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10797037/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4