2016-04-06 4 views
0

私はUIImageViewのスクリーンショットとその上にあるUILabelを撮ろうとしています。UILabelのScreenShotとUIImageViewにあるもの

ImageViewでUIImageを取得してからオーバーレイをレンダリングしますが、UILabelの配置はすべて間違っています。キャプチャのサイズを実際のイメージサイズに設定しています(これは私が望むものではありません)。

画面に表示されているとおりにスクリーンショットを撮りたいだけです。

CGSize imageSize = self.imageFromOtherView.size; 
// define the size and grab a UIImage from it 
UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0); 

[self.imageFromOtherView drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)]; 

[self.socialLabel.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

画面全体またはスクリーン上の画像のスクリーンショットを取得したいですか?あなたの質問から伝えるのはちょっと難しいです。 – fsb

答えて

1

UIImageViewとUILabelの両方を保持するUIViewを作成します。次に、このコンテナビューをこのコードに渡します。私はviewForPhotoというプロパティーとして私のビューを持っているので、コードが呼び出されるときにはそのビューしかキャプチャしません。ビューを受け取れるようにそれを微調整することができます。これは、あなたが望むUIImageを返します。

- (UIImage *)imageByRenderingView 
{ 
    UIGraphicsBeginImageContextWithOptions(self.viewForPhotoView.bounds.size, NO, 0.0); 
    [self.viewForPhotoView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return resultingImage; 
} 
+0

助けてくれてありがとう! – Ro4ch

1

共通コンテナビューにこれらのビューの両方を追加し、文脈でそれをレンダリングするためにビューに- (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdatesを呼び出します。