2

画像関連のアプリを作っています。画面に複数の画像があります。私はそれのスクリーンショットを撮っていました。しかし、それは私の全画面を提供するべきではありません。最上部と最下部のほとんどの部分は、その中に表示する必要はありません。

上にナビゲーションバーがあります。下部にはいくつかのボタンがあります。スクリーンショット画像にそのボタンとナビゲーション バーをキャプチャしたくありません。以下はスクリーンショットの私のコードです。

-(UIImage *) screenshot
{
    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, [UIScreen mainScreen].scale);

    [self.view drawViewHierarchyInRect:self.view.frame afterScreenUpdates:YES];

    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

スクリーンショットを撮った後、Facebookの共有方法で以下のコードで使用しています。

UIImage *image12 =[self screenshot];

[mySLComposerSheet addImage:image12]; 
4

4 に答える 4

2

これを実現する最も簡単な方法は、スクリーンショットを撮りたいすべてのコンテンツを保持する UIView を追加しdrawViewHierarchyInRect、メインの UIView の代わりにその UIView から呼び出すことです。

このようなもの:

-(UIImage *) screenshot {
    UIGraphicsBeginImageContextWithOptions(contentView.bounds.size, YES, [UIScreen mainScreen].scale);

    [contentView drawViewHierarchyInRect:contentView.frame afterScreenUpdates:YES];

    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

お役に立てれば!

于 2013-11-15T06:43:55.020 に答える
0

このコードを使用してください

   -(IBAction)captureScreen:(id)sender
    {
        UIGraphicsBeginImageContext(webview.frame.size);
        [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
    }

サンプル プロジェクトwww.cocolibrary.blogspot.com

http://www.bobmccune.com/2011/09/08/screen-capture-in-ios-apps/

于 2014-03-20T11:36:42.090 に答える
0

スナップショットViewAfterScreenUpdates

ただし、 iOS 7.0 以降でのみ利用可能です。

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates

このメソッドは、レンダー サーバーから画面の現在のビジュアル コンテンツをキャプチャし、それらを使用して新しいスナップショット ビューを構築します。返されたスナップショット ビューを、アプリ内の画面のコンテンツの視覚的な代用として使用できます。たとえば、スナップショット ビューを使用して、全画面アニメーションを容易にすることができます。コンテンツは既にレンダリングされたコンテンツからキャプチャされるため、このメソッドは画面の現在の視覚的外観を反映し、スケジュールされているか進行中のアニメーションを反映するように更新されません。ただし、この方法は、画面の内容を自分でビットマップ イメージにレンダリングするよりも高速です。

https://developer.apple.com/library/ios/documentation/uikit/reference/UIScreen_Class/Reference/UIScreen.html#//apple_ref/occ/instm/UIScreen/snapshotViewAfterScreenUpdates:

于 2014-03-20T11:43:54.287 に答える
0

以下のコードを使用して、ビューのスクリーンショットを撮ることができます。

スクリーンショットのサイズを確認する条件を入れました。

このコードを使用すると、画像がドキュメント フォルダーに保存され、そこから画像を使用して Facebook や共有したい場所で共有できます。

CGSize size = self.view.bounds.size;
    CGRect cropRect;

    if ([self isPad])
    {
        cropRect = CGRectMake(110 , 70 , 300 , 300);
    }

    else
    {
        if (IS_IPHONE_5)
        {
            cropRect = CGRectMake(55 , 25 , 173 , 152);
        }
        else
        {
            cropRect = CGRectMake(30 , 25 , 164 , 141);
        }
    }


    /* Get the entire on screen map as Image */
    UIGraphicsBeginImageContext(size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * mapImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    /* Crop the desired region */
    CGImageRef imageRef = CGImageCreateWithImageInRect(mapImage.CGImage, cropRect);
    UIImage * cropImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);

    /* Save the cropped image
     UIImageWriteToSavedPhotosAlbum(cropImage, nil, nil, nil);*/

    //save to document folder
    NSData * imageData = UIImageJPEGRepresentation(cropImage, 1.0);
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* documentsDirectory = [paths objectAtIndex:0];

    NSString *imagename=[NSString stringWithFormat:@"Pic.jpg"];

    NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imagename];
    ////NSLog(@"full path %@",fullPathToFile);
    [imageData writeToFile:fullPathToFile atomically:NO];

お役に立てば幸いです。

于 2013-11-15T06:24:13.863 に答える