レンダリング用の実装任意のUIViewをイメージ化する(網膜表示用にも機能する)。
helper.hファイル:
@interface UIView (Ext)
- (UIImage*) renderToImage;
@end
とhelper.mファイルに実装所属:
#import <QuartzCore/QuartzCore.h>
@implementation UIView (Ext)
- (UIImage*) renderToImage
{
// IMPORTANT: using weak link on UIKit
if(UIGraphicsBeginImageContextWithOptions != NULL)
{
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
} else {
UIGraphicsBeginImageContext(self.frame.size);
}
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
0.0スケールファクタです。ビットマップに適用する倍率。 0.0の値を指定すると、倍率はデバイスのメイン画面の倍率に設定されます。
QuartzCore.frameworkも、レイヤーオブジェクトのfunctionを呼び出すため、プロジェクトに配置する必要があります。
弱いリンクを有効にするには、左のナビゲータでプロジェクト項目をクリックし、プロジェクトターゲット→ビルドフェーズ→リンクバイナリをクリックし、UIKitフレームワークで「オプション」(弱い)タイプを選択します。ここ
は、UIColor、UIImage、NSArrayの、NSDictionaryのための同様の拡張子を持つlibraryある...
'UIGraphicsBeginImageContextWithOptions'を使うことができるかどうかチェックする点は何ですか?下位互換性のためですか? – pixelfreak
このソリューションには、renderInContextメソッド用のQuartzCoreフレームワークも必要です。 – arlomedia
@pixelfreakこれは、UIGraphicsBeginImageContextWithOptionsがiOS 4 +でのみ利用可能であるためです。 – shannoga