我可以从exists CGContextRef
获取上下文(UIImageView
)吗?
详细信息:我有一个指向xib文件的控制器链接。在IB中,我添加了一个UIImageView
并引用它:
IBOutlet UIImageView *imageView;
现在,在viewDidLoad
如何获取UIImageView
上下文(CGContextRef
)?
在此之前,如果我使用:
CGContextRef context = UIGraphicsGetCurrentContext();
输出:
<Error>: CGContextTranslateCTM: invalid context
提示?
答案 0 :(得分:3)
如果你想使用自己的绘图方法,你应该在UIView的drawRect:方法中应用它们。您需要创建自己的绘图逻辑子类UIView:在XCode中使用File-&gt; New File并选择UIView作为模板,它将为您提供基本框架。在Interface-Builder中,您可以先添加一个新视图,然后使用“检查器”窗口中“标识”选项卡下的类进行设置。
然后该方法应该以这样的方式开始,以便为您提供对上下文的引用:
- (void)drawRect:(CGRect)fr {
CGContextRef context = UIGraphicsGetCurrentContext();
... DRAWING CODE ...
}
首次显示视图时会自动调用此方法。如果你的逻辑依赖于某些变量,你应该在UIView上调用setNeedsDisplay
让视图重新运行绘图逻辑。
但是,这不适用于UIImageView
(LINK):
子类注释
特别注意事项
优化UIImageView类以将其图像绘制到显示器。 UIImageView不会调用drawRect:一个子类。如果您的子类需要自定义绘图代码,建议您使用UIView作为基类。
答案 1 :(得分:2)
添加对UIGraphicsBeginImageContext的调用(self.frame.size);在UIGraphicsGetCurrentContext()之前; 它会起作用。
UIGraphicsBeginImageContext(self.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();