改善したこと。
UILabelで作成した、myLabelをtouchesMovedで、動かしているのですが、
ドラッグし続けると、反応しなくなります。
これは、バグなのかコードの問題なのか、改善の余地はあるのか、教えていただきたいです。
下記に反応しなくなる時の動画のリンクと、コードの記載しています。
よろしくお願いいたします。
動画はyoutubeの方に限定公開で投稿してます。(他に動画の載せ方がありましたら教えて下さい。)
https://www.youtube.com/watch?v=0cSek_kRO3s
該当のソースコード
import UIKit class ViewController: UIViewController { var myLabel:UILabel! var coinCount = 0 @IBAction func addImage(_ sender: UITapGestureRecognizer) { // タップする(coinCount==0)とmyLabelが表示される。 if coinCount == 0 { myLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 80, height: 80)) myLabel.text = "Drag!" myLabel.textAlignment = NSTextAlignment.center myLabel.backgroundColor = UIColor.red myLabel.layer.masksToBounds = true myLabel.center = sender.location(in: self.view) myLabel.layer.cornerRadius = 40.0 UIView.animate(withDuration: 0.10, animations: { // アニメーションをつける self.myLabel.transform = CGAffineTransform(scaleX: 1.5, y: 1.5) }) { (Bool) -> Void in } self.view.addSubview(myLabel) // 2回目のタップの時(coinCount==2)ラベルが消える。 } else if coinCount == 1 { myLabel.removeFromSuperview() } coinCount = coinCount + 1 coinCount = coinCount % 2 } // ドラッグした時のコード @IBAction override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { print("touchesMoved") let aTouch = touches.first! let location = aTouch.location(in: self.view) let prevLocation = aTouch.previousLocation(in: self.view) var myFrame: CGRect = self.view.frame // ドラッグで移動したx, y距離をとる. let deltaX: CGFloat = location.x - prevLocation.x let deltaY: CGFloat = location.y - prevLocation.y // 移動した分の距離をmyFrameの座標にプラスする. myFrame.origin.x += deltaX myFrame.origin.y += deltaY // frameにmyFrameを追加. self.view.frame = myFrame } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } }
発生している問題・メッセージ
エラーは特になし。
使用している言語
swift
Xvode 11.4
ご教授のほど、よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー