【Swift】 탭했을 때 추종해 오는 View를 작성한다
소개
이러한 느낌으로, 탭한 위치에 추종해 오는 View를 작성하고 싶습니다.
구현
copipe로 만들 수 있습니다.
final class ViewController: UIViewController {
private var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
myView = UIView()
myView.frame.size = CGSize(width: 100, height: 100)
myView.center = self.view.center
myView.backgroundColor = .red
myView.isUserInteractionEnabled = true
self.view.addSubview(myView)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if touches.first!.view == self.view {
let after = touches.first!.location(in: self.view)
let before = myView.center
let deltaX = after.x - before.x
let deltaY = after.y - before.y
UIView.animate(withDuration: 0.3) {
self.myView.transform = CGAffineTransform(translationX: deltaX, y: deltaY)
}
}
}
}
해설
touchesBegan
는 탭했을 때 호출되는 메소드입니다. ( touchesBegan )
가장 먼저 탭한 부분의 좌표를 가져옵니다. 이것이 View의 목적지 좌표입니다.
let after = touches.first!.location(in: self.view)
이동 전 뷰의 좌표도 가져와야 합니다.
let before = myView.center
x와 y의 변화량을 각각 구합니다. (변화량이라고 하는 것은, 어느 정도 값이 증감했는지를 나타내는 것입니다)
예를 들어, 이동 전의 좌표 (10, 300)에서 이동 후의 좌표 (30, 200)로 이동 한 경우의 x와 y의 변화량 Δx, Δy는
Δx = 30 - 10 = 20
Δy = 200 - 300 = -100
따라서 변화량은 (20, -100)입니다.
let deltaX = after.x - before.x
let deltaY = after.y - before.y
그리고, 구한 변화량이 View가 이동해야 할 이동량이 되므로, CGAffineTransform로 애니메이션 첨부로 이동시켜 드리겠습니다. ( CGAffineTransform )
UIView.animate(withDuration: 0.3) {
self.myView.transform = CGAffineTransform(translationX: deltaX, y: deltaY)
}
결론
끝입니다.
Reference
이 문제에 관하여(【Swift】 탭했을 때 추종해 오는 View를 작성한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/REON/items/833ef4e36edc7f2cb4d1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
copipe로 만들 수 있습니다.
final class ViewController: UIViewController {
private var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
myView = UIView()
myView.frame.size = CGSize(width: 100, height: 100)
myView.center = self.view.center
myView.backgroundColor = .red
myView.isUserInteractionEnabled = true
self.view.addSubview(myView)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if touches.first!.view == self.view {
let after = touches.first!.location(in: self.view)
let before = myView.center
let deltaX = after.x - before.x
let deltaY = after.y - before.y
UIView.animate(withDuration: 0.3) {
self.myView.transform = CGAffineTransform(translationX: deltaX, y: deltaY)
}
}
}
}
해설
touchesBegan
는 탭했을 때 호출되는 메소드입니다. ( touchesBegan )
가장 먼저 탭한 부분의 좌표를 가져옵니다. 이것이 View의 목적지 좌표입니다.
let after = touches.first!.location(in: self.view)
이동 전 뷰의 좌표도 가져와야 합니다.
let before = myView.center
x와 y의 변화량을 각각 구합니다. (변화량이라고 하는 것은, 어느 정도 값이 증감했는지를 나타내는 것입니다)
예를 들어, 이동 전의 좌표 (10, 300)에서 이동 후의 좌표 (30, 200)로 이동 한 경우의 x와 y의 변화량 Δx, Δy는
Δx = 30 - 10 = 20
Δy = 200 - 300 = -100
따라서 변화량은 (20, -100)입니다.
let deltaX = after.x - before.x
let deltaY = after.y - before.y
그리고, 구한 변화량이 View가 이동해야 할 이동량이 되므로, CGAffineTransform로 애니메이션 첨부로 이동시켜 드리겠습니다. ( CGAffineTransform )
UIView.animate(withDuration: 0.3) {
self.myView.transform = CGAffineTransform(translationX: deltaX, y: deltaY)
}
결론
끝입니다.
Reference
이 문제에 관하여(【Swift】 탭했을 때 추종해 오는 View를 작성한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/REON/items/833ef4e36edc7f2cb4d1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let after = touches.first!.location(in: self.view)
let before = myView.center
let deltaX = after.x - before.x
let deltaY = after.y - before.y
UIView.animate(withDuration: 0.3) {
self.myView.transform = CGAffineTransform(translationX: deltaX, y: deltaY)
}
끝입니다.
Reference
이 문제에 관하여(【Swift】 탭했을 때 추종해 오는 View를 작성한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/REON/items/833ef4e36edc7f2cb4d1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)