【问题标题】:How to draw an UIImage or directly in -drawRect:?如何绘制 UIImage 或直接在 -drawRect: 中?
【发布时间】:2009-11-02 21:27:39
【问题描述】:

我有一个UIImage,我想在UIView 上绘制它。但是我不想创建UIImageView 并将其添加为子视图,而是要覆盖-drawRect: 并直接绘制我的 UIView。

例如,我的代码如下所示:

- (void)drawRect:(CGRect)rect {
    CGContextRef myContext = UIGraphicsGetCurrentContext();

    UIImage *img = [UIImage imageNamed:@"foo.png"];

    // how to draw the directly into the view now?
}

【问题讨论】:

    标签: iphone cocoa-touch uiimage drawrect


    【解决方案1】:

    致电[img drawInRect:rect];

    【讨论】:

    • 还有[img drawAtPoint:point],虽然我更喜欢drawInRect:
    • 尽量避免使用这种技术; drawInRect 和 drawAtPoint 的性能非常糟糕。
    • 谢谢。我发现这些对于包含背景图像和文本然后添加到滚动视图的视图特别有用(结合类似的 NSString UIKit 绘图插件)。在 drawRect 中将背景图像和文本一起绘制:避免 Quartz 混合图层(如果您使用 UIImageView 和 UILabel 子视图方法会这样做),这对滚动性能有重大影响
    【解决方案2】:

    顺便说一句,您不应该在 drawRect 方法中加载图像文件。因为每当需要更新视图时都会调用该方法。因此,它(当然是加载过程)在运行过程中可能会被多次调用。 (此外,OS2.x 的 imageNamed 方法有一个 bug —— 没有缓存图像并泄露它。)

    因此,最好在初始化方法中加载文件,而不是在drawRect中。

    【讨论】:

    • 感谢您提供有用的信息。不幸的是,您指的是哪种“初始化”方法?
    • 他可能指的是+(void)initialize,或者通常的init 方法,这取决于你在做什么。
    猜你喜欢
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多