don*_*ile 31 iphone core-graphics
这真是一种痛苦,但总是当我在-drawRect中绘制一个UIImage时,它是颠倒的.
当我翻转坐标时,图像正确绘制,但代价是所有其他CG函数绘制"错误"(翻转).
当你必须绘制图像和其他东西时,你的策略是什么?是否有任何经验法则如何不会一次又一次地陷入这个问题?
另外,当我翻转y轴时,一件令人讨厌的事情是,来自UIImageView框架的我的CGRect是错误的.而不是原点出现在预期的10,10左上方,它出现在底部.
但与此同时,CGContext的所有正常线条绘制功能都采用了正确的坐标.在-drawRect中绘制一条直线10,10左上方的线,将从左上角开始.但同时这很奇怪,因为核心图形实际上有一个翻转坐标系,底部是y 0.
所以似乎某些东西在那里真的不一致.使用CGContext函数绘制时,坐标为"预期"(cmon,没人认为坐标从左下角开始,这是愚蠢的),而绘制任何类型的图像仍然是"错误"的方式.
你使用辅助方法绘制图像吗?或者是否有任何有用的东西使图像绘制不是一个痛苦的屁股?
Pet*_*sey 29
问题:原点位于左下角; 正y向上(负y向下).
目标:起源于左上角; 正y向下(负y向上).
解:
在代码执行此操作的方法是将翻译由视图边界的高度和向上尺度由(1,-1),以该顺序.
Quartz 2D Programming Guide的几个部分与本主题相关,包括"在iPhone OS上绘制图形上下文"和整个变换章节.当然,你真的应该读完整个事情.
小智 9
您可以通过在要在UIKit相关坐标中转换的点上应用affinetransform来实现.以下是示例.
// Create a affine transform object
CGAffineTransform transform = CGAffineTransformMakeScale(1, -1);
// First translate your image View according to transform
transform = CGAffineTransformTranslate(transform, 0, - imageView.bounds.size.height);
// Then whenever you want any point according to UIKit related coordinates apply this transformation on the point or rect.
// To get tranformed point
CGPoint newPointForUIKit = CGPointApplyAffineTransform(oldPointInCGKit, transform);
// To get transformed rect
CGRect newRectForUIKit = CGRectApplyAffineTransform(oldPointInCGKit, transform);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16276 次 |
| 最近记录: |