【问题标题】:UIbezierpaths in a zoomable view可缩放视图中的 UIbezierpaths
【发布时间】:2012-07-23 17:59:54
【问题描述】:

我在可缩放的 UIView(pdf 阅读器的绘图层)中绘制贝塞尔路径。当我放大文档时,UIView 也会放大,但是所有的绘图和线条看起来都更加像素化。有没有办法在没有太多像素化的情况下渲染这些路径?它假设贝塞尔路径是基于矢量的......

提前致谢!

【问题讨论】:

    标签: ios drawing quartz-graphics uibezierpath


    【解决方案1】:

    你是正确的 UIBezierPath 是基于矢量的。但是,当您将路径绘制到视图中时,它会使用视图层上的contentScale 属性来确定绘制时要使用的细节量。

    您可以做的是当用户完成缩放时,将内容比例设置为正确的数量。

    drawingView.layer.contentScale = [[UIScreen mainScreen] scale] * zoomAmount;

    【讨论】:

    • 我需要调用 [setneedsdisplay] 吗?我尝试了这种方法,但我收到了内存警告。
    【解决方案2】:

    您可以改用CAShapeLayer。只需创建 CAShapeLayer,添加 CGPath 并将一个图层作为子图层添加到您的 UIView 图层

    【讨论】:

    • 你能举个例子吗?我是石英和绘图的新手。到目前为止,我正在使用 touchesbegan、moven 和 end 在我的绘图 UIView 子类的 drawRect 方法中绘图。 - (void)drawRect:(CGRect)rect { [[UIColor redColor] setStroke]; for (UIBezierPath *path in self.pathArray) [路径 strokeWithBlendMode:kCGBlendModeNormal alpha:1.0]; }
    • 在你的视图初始化中类似的东西 (UIBezierPath *path in self.pathArray){ CAShapeLayer *layer1 = [CAShapeLayer layer]; layer1.strokeColor = [UIColor redColor].CGColor; layer1.path = path.CGPath; [self.layer addSublayer:layer1]; }
    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多