2012-02-24 13 views
1

特定の背景色のビューがあります。私はこのビューを次のコードでマスクしています:ios:スクリーンショットにマスクが表示されません。レイヤー

UIView *colorableView = [[UIView* alloc] init]; 
colorableView.backgroundColor = someColor; 

CALayer *maskLayer = [CALayer layer]; 
maskLayer.contents = (id)[UIImage imageNamed:maskImageName].CGImage; 

colorableView.layer.mask = maskLayer; 

すべてがうまくいきます。ビューはマスクされるので、一部の部分は透明です。今私は、このビューのスクリーンショットを作る:

CGRect frame = colorableView.frame; 

UIGraphicsBeginImageContext(frame.size); 

CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(someUninterestingCodeToGetACorrectPosition); 

[self.view.layer renderInContext:c]; 
UIImage *screenShotImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

return screenShotImage; 

は(実際に私はあまりにもビューの上にいくつかの他のものを表示し、それは同様にスクリーンショットに表示されます)スクリーンショット作品を撮影、何とか、マスクが認識されません。私が得るのは、完全に色付けされたビュー(四角形)のスクリーンショットで、マスクはマスクの一部を隠さないという意味です。

私は'UIGraphicsGetImageFromCurrentImageContext() `はマスクレイヤーでは動作しないと思いますので、どうすればいいですか?スクリーンショットをメールで表示するにはUIImageが必要です。たくさん事前に

おかげでこの問題を解決するために

答えて

1

一つの方法は、ビュー(CGContextClipをクリップするクォーツ機能を使用することができ、私は正確に覚えていない、あなたは、ドキュメントに少し掘るする必要があります)。 これが役に立ちますようにお願いします。

+0

私はdrawRectメソッド内で'CGContextClipToMask(context、rect、maskImage) 'を使用しています。私はdrawRectをオーバーライドするときに色をアニメーション化することができないので(これは私が時々行う)、スクリーンショットのためにのみ行います。 1つは、より高い解像度のマスクを取得する方法を知っています。なぜなら、rectのサイズがマスクの解像度を制限すると思うからです。元のrectはかなり小さいですがアイコンが時々大きくなるので、スクリーンショットを撮るとマスクの解像度は元のマスキング方法のマスクの解像度よりもはるかに低くなります。 – JayAr

+0

あなたは網膜ディスプレイを使用している可能性がありますか?その場合、スケールプロパティ[[UIScreen mainScreen] scale](構文については正確ではありません)が得られます。次に、rect値にこの値を掛けます。 – Ganzolo

+0

私はIpad2に取り組んでいますので、網膜は表示されず、スケールプロパティは1を返します。私がInterface Builderで元のビューを非常に大きくすると、マスクの解像度は良好です。しかし、元のビューはアイコンと同じくらい大きく、しばらくすると大きくなります。その後、私はスクリーンショットを作成し、元のrectが小さかったので、解像度は低いです。私はこれについて別の質問をすると思います。 – JayAr

関連する問題