1

ユーザーが画面を1秒間保持するたびにスクリーンショットを撮り、電子メールウィンドウを開いてユーザーに画像を送信させたい. しかし、奇妙な問題があります。グラデーション画像が存在する場合、画像がめちゃくちゃになります(UIImagePNGグラデーションがロードされています-説明します)。

そこで、 を作成し、それをUILongPressGestureRecgnizerに設定し、それをジェスチャ認識エンジンとしてメイン ビューに追加しました: 。レコグナイザーはメソッドを呼び出します。現在の画面をキャプチャし、その画像を含む電子メール コンポーザをポップアップ表示します。これが私がそれを行う方法です:minimumPressDuration1.0f[self.view addGestureRecognizer:myRecognizer]shareClicked

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
    else
        UIGraphicsBeginImageContext(self.view.bounds.size);

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

    MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
    mailComposer.mailComposeDelegate = self;
    [mailComposer setSubject:@"Share feature"];
    [mailComposer setMessageBody:[NSString stringWithFormat:@"Im sharing this with you cause its cool."] isHTML:NO];
    [mailComposer addAttachmentData:UIImagePNGRepresentation(image) mimeType:@"image/png" fileName:@"image"];

    [self presentViewController:mailComposer animated:YES completion:NULL];

しかし問題がある。メイン ビューにはテーブル ビューがあり、3 番目のセルには前述のグラデーションがあります。どのように説明すればよいかわかりませんが、次のようなものです。

ここに画像の説明を入力

画像に見えるように、上部にグラデーションがあり、少し下に別のグラデーションがあります。一番上のものは正常にレンダリングされますが、2番目のものは奇妙な問題を引き起こします. グラデーションは実際には青ではなく、白で透明になります。これは、黒い表面のグラデーションのイメージです。 ここに画像の説明を入力

シミュレーターのスクリーン ショットを次に示します。

ここに画像の説明を入力

最後に、メール コンポーザでレンダリングおよび表示する方法を次に示します。

ここに画像の説明を入力

私は何を間違っていますか?何が問題ですか?シミュレーターのせいではなく、モバイルデバイスでも同じです。それが違いを生むなら、そのiOS7。

明確にするために、上部のグラデーションは同じですが、放射状であり、完全にレンダリングされています。両方のグラデーションは、tableview のセルのサブビューです。修正方法は?この質問を「作成」するのに時間を費やしたので、解決策が見つかることを願っています:)

4

1 に答える 1