【问题标题】:How to scale custom drawings inside drawRect:如何在 drawRect 中缩放自定义绘图:
【发布时间】:2012-04-10 08:45:49
【问题描述】:

我遇到了与 this guy 相同的问题,并且提供的解决方案没有解决它(也不清楚它在另一个 SO 问题中解决了它)。

当您更改 UIView 的 .frame 大小,并且您没有更改默认的 .contentMode,那么可以肯定的是,drawRect(石英路径)中的自定义绘图应该与界面视图?我的没有。现在我可以调用setNeedsDisplay,它会重绘,但我正在寻找可以动画的缩放。这可能吗?

相反,对我来说发生的事情是 Quartz 图纸被简单地裁剪但保持其大小。我已经尝试直接设置contentMode 以及clipsToBounds 和其他实验,但无论我尝试什么,我都不会对 Quartz 进行自动缩放。

【问题讨论】:

    标签: iphone objective-c ipad uiview core-graphics


    【解决方案1】:

    一定是发生了其他事情..Here's 一个简单的演示,我拼凑起来仔细检查 contentMode 是否按预期工作 - 果然,当 contentMode 设置为默认的“缩放填充”时,支持位图放大/缩小”。并且在视图上调用 setNeedsDisplay 会重新渲染图像。

    您还对视图做了哪些其他事情? (你还没有改变它的 contentStretch 属性,是吗?)你对视图层做了什么吗?你检查过视图上的 contentMode 真的是 UIViewContentModeScaleToFill 吗?另外,您是在为视图本身的框架或超级视图设置动画吗?

    【讨论】:

    • 我已经下载了你的示例,但是我在 Xcode 中没有提供模拟器选项,知道为什么吗?我注意到你在动画之后是 setNeedsDisplay 。是不是在你这样做之前它没有缩放,或者你这样做是为了在动画之后重绘以获得更好的分辨率?
    • 嗯,这很奇怪。我在 Xcode 4.3.2 中,使用 5.1 模拟器。您可以创建一个新的 ipad 项目并将源文件和 xib 文件拖入。它在动画中放大和缩小。如果您注释掉 setNeedsDisplay 调用,它会根据帧设置保持放大或缩小,但如果它被放大,它会变得模糊和锯齿状。
    • 感谢您的帮助。我的问题似乎是我在 setNeedsDisplay 完成之前设置了自定义视图的框架,或者其他什么。没有把握。我试着在适当的时候确保视图在缩放之前已经初始化,并且确实可以正常工作。
    【解决方案2】:

    你可以尝试覆盖drawLayer

    - (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx
    {
        [super drawLayer:layer inContext:ctx];
    
        /*here to change self.frame
            self.frame = CGRectMack(a, b, c, d);
        */
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多