7

UIViewbackgroundColorセットで持っていcolorWithPatternImageます。予想どおり、背景画像は左上隅から描画されます

そのビューでやっているときに問題が発生renderInContextします。背景画像は左下隅から描画されます。他のすべてはうまくレンダリングされているようです。

ソースと宛先のイメージは次のとおりです。

ここに画像の説明を入力

コードは次のとおりです。

// 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ますか?

4

2 に答える 2

6

modf(viewHeight, patternHeight) の高さで CGContextSetPatternPhase を呼び出すことで、これを回避することができました。

于 2012-12-03T11:19:35.130 に答える
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 の座標系と一致するように個別に調整されます。この場合、Quartz によって作成されたコンテキストを、UIKit によって提供されるコンテキストの動作に一致するようにアプリケーションが変更するために使用できる CTM と同等のメカニズムはありません。アプリケーションは、描画しているコンテキストの種類を認識し、コンテキストの期待に一致するように動作を調整する必要があります。

于 2013-04-04T11:51:09.320 に答える