0

スクロールビューのオフスクリーン コンテンツも画像にレンダリングしたいと考えています。

ただし、次のコードは、scrollView コンテンツ全体をレンダリングすることになっているにもかかわらず、画面上のコンテンツのみをレンダリングします。

誰でも助けてもらえますか?

前もって感謝します!

UIImage *image = nil;

 UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, false, 0.0);
 {
        CGPoint savedContentOffset = scrollView.contentOffset;
        CGRect savedFrame = scrollView.frame;

        scrollView.contentOffset = CGPointMake(0.0, 0.0);
        scrollView.frame = CGRectMake(0, 0.0, scrollView.contentSize.width, scrollView.contentSize.height);

        NSLog(@"%.2f",scrollView.contentSize.height);

        [scrollView.layer renderInContext:UIGraphicsGetCurrentContext()];
        image = UIGraphicsGetImageFromCurrentImageContext();

        scrollView.contentOffset = savedContentOffset;
        scrollView.frame = savedFrame;

}
UIGraphicsEndImageContext();
4

3 に答える 3

5

自動サイズ設定が適切に設定されていなかったため、スクロール ビューの下部が動かなかったことがわかりました…</p>

次のコードはうまく機能します。

コード:

- (UIImage *)createPicture
{
[self setMasks:true];
UIImage *image = nil;

UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, false, 0.0);
{
    CGPoint savedContentOffset = scrollView.contentOffset;
    CGRect savedFrame = scrollView.frame;

    scrollView.contentOffset = CGPointMake(0.0, 0.0);
    scrollView.frame = CGRectMake(0, 0.0, scrollView.contentSize.width, scrollView.contentSize.height);

    NSLog(@"%.2f",scrollView.contentSize.height);

    [scrollView.layer renderInContext:UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();

    scrollView.contentOffset = savedContentOffset;
    scrollView.frame = savedFrame;

}
UIGraphicsEndImageContext();

[self setMasks:false];

return image;
}

- (void)setMasks:(bool)photo
{
if (photo) {
    for (label in labels)
    {
        label.autoresizingMask = (UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin);
    }
于 2012-07-24T19:38:48.293 に答える
0

さて、あなたは別のアプローチを試すことができます。

  • 今と同じようにコンテキストを作成し(実際の背の高い)、currentOffsetを使用します

  • scrollViewをコンテキストの上部に配置し、1つの画面をいっぱいにします。

  • contentOffset.yをscrollViewの高さに変更します

  • scrollViewの高さによってオフセットされたコンテキストで次の画面をレンダリングします

したがって、基本的に一度に1ページをレンダリングします。

于 2012-07-23T12:20:37.033 に答える
0
  • (IBAction)screenShot:(id)送信者 {

    scrollView.frame = CGRectMake(0, 0, 320, 700);

    UIGraphicsBeginImageContext(scrollView.frame.size);

    CGContextRef c = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(c, 0, 60); [self.view.layer renderInContext:c]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    //写真アルバムに保存するか、次のコードで画像を共有します

    NSArray * itemsToShare = @[viewImage];

    UIActivityViewController *activity = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil];

    activity.excludedActivityTypes = @[];

    [self presentViewController:アクティビティ アニメーション:YES 完了:nil]; }

于 2014-07-02T08:02:05.253 に答える