renderInContext翻转colorWithPatternImage的原点

时间:2012-11-18 23:46:38

标签: ios

UIView backgroundColor设为colorWithPatternImage。正如预期的那样,背景图像从顶部左上角开始绘制。

当我在该视图上执行renderInContext时出现问题:从底部左上角开始绘制背景图像。其他一切似乎都很好。

这是源图像和目标图像:

enter image description here

以下是代码:

// here is the layer to be rendered into an image
UIView *src = [[UIView alloc] initWithFrame:(CGRect){{0, 0}, {100, 100}}];
src.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]];
[self.view addSubview:src];

// here we'll display the image
UIImageView *dest = [[UIImageView alloc] initWithFrame:(CGRect){{110, 0}, src.bounds.size}];
[self.view addSubview:dest];

// render `src` to an image in `dest`
UIGraphicsBeginImageContext(src.bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[src.layer renderInContext:context];
dest.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

有没有办法让图像按正确的方向平铺,就像src视图一样?

2 个答案:

答案 0 :(得分:6)

我设法通过调用高度为modf(viewHeight,patternHeight)的CGContextSetPatternPhase来解决这个问题

答案 1 :(得分:2)

https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/uid/TP30001066-CH202-CJBBAEEC

本文档解释了为什么会发生这种情况,特别是这一部分:

重要提示:上述讨论对于了解您是否计划在iOS上编写直接针对Quartz的应用程序至关重要,但这还不够。在iOS 3.2及更高版本中,当UIKit为您的应用程序创建绘图上下文时,它还会对上下文进行其他更改以匹配默认的UIKIt约定。特别是,不受CTM影响的图案和阴影会单独调整,以使其惯例与UIKit的坐标系相匹配。在这种情况下,没有与CTM等效的机制,您的应用程序可以使用它来更改Quartz创建的上下文以匹配UIKit提供的上下文的行为;您的应用程序必须识别它所绘制的上下文类型并调整其行为以符合上下文的期望。