質問失礼します。
ボタン押下時にビューを横へスライドさせるアニメーションを使用してラベルのテキストを書き換えたいです。
テキスト更新前の状態をイメージとして取得・表示し、テキスト更新後のビューをスライドさせる方法を考えて、
下記の様にコードを記載してみました。
スクロールビューがなければ上手くいったのですが、
スクロールしていると取得する画像がビューの先頭からになってしまう為、画面にズレが発生してしまいます。
対象のビュー全体でなく、画像取得時に画面内に表示されている状態をイメージとして取得する方法はないでしょうか。
どなたか御教授いただけますと嬉しいです。
よろしくお願い致します。
Swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var label1: UILabel! 6 @IBOutlet weak var label2: UILabel! 7 @IBOutlet weak var label3: UILabel! 8 @IBOutlet weak var prevImage: UIImageView! 9 @IBOutlet weak var currentView: UIView! 10 @IBOutlet weak var scrollView: UIScrollView! 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 } 15 16 @IBAction func buttonAction(_ sender: Any) { 17 // キャプチャする範囲を取得. 18 let rect = scrollView.bounds 19 20 //ビットマップ画像のcontextを作成開始する(画像サイズ、透過がある場合はfalse(不透明の場合はtrue)、倍率を設定する) 21 UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0) 22 //contextを作成 23 let context: CGContext = UIGraphicsGetCurrentContext()! 24 //対象のview内の描画をcontextにrender(複写)する. 25 scrollView.layer.render(in: context) 26 //現在のcontextのビットマップをUIImageとして取得. 27 let capturedImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 28 //前の画面をImageViewとして表示する 29 prevImage.image = capturedImage 30 // contextを閉じる. 31 UIGraphicsEndImageContext() 32 //scrollViewをアニメーション開始位置に移動させる 33 scrollView.transform = CGAffineTransform(translationX: scrollView.frame.size.width, y: 0) 34 35 //ラベルのテキストに値を反映する 36 label1.text = "たちつてと" 37 label2.text = "なにぬねの" 38 label3.text = "はひふへほ" 39 40 //アニメーションを開始する 41 UIView.animate(withDuration: 1, animations: { 42 //画面を横にスライドさせて表示する 43 self.scrollView.transform = CGAffineTransform(translationX: 0, y: 0) 44 45 }, completion: {finished in self.prevImage.image = nil}) 46 } 47}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/22 11:44