ユーザーが画面を1秒間保持するたびにスクリーンショットを撮り、電子メールウィンドウを開いてユーザーに画像を送信させたい. しかし、奇妙な問題があります。グラデーション画像が存在する場合、画像がめちゃくちゃになります(UIImage
PNGグラデーションがロードされています-説明します)。
そこで、 を作成し、それをUILongPressGestureRecgnizer
に設定し、それをジェスチャ認識エンジンとしてメイン ビューに追加しました: 。レコグナイザーはメソッドを呼び出します。現在の画面をキャプチャし、その画像を含む電子メール コンポーザをポップアップ表示します。これが私がそれを行う方法です:minimumPressDuration
1.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 のセルのサブビューです。修正方法は?この質問を「作成」するのに時間を費やしたので、解決策が見つかることを願っています:)