Pan Gesture 사용 - 2
-
Pan Gesture 사용-1에서 더 나아가 화면 밖을 벗어났을 경우 다시 돌아오게 하는 설정과 움직이는 축 제한하는 부분을 추가하였다.
-
ViewController.swift
//
// ViewController.swift
// panGesture
//
// Created by yoon-yeoungjin on 2022/03/26.
//
import UIKit
/*
제한할 축 enum 선언
*/
enum dtype{
case x
case y
case none
}
class ViewController: UIViewController {
var dragTyep = dtype.none
let myView = DraggbleView()
override func viewDidLoad() {
super.viewDidLoad()
myView.center = self.view.center
myView.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
myView.backgroundColor = .red
self.view.addSubview(myView)
// Do any additional setup after loading the view.
}
/*
segmentedControl 스위치에 따라서 어떤 축을 제한할 건지 셋팅하고 이를 draggbleView 클래스에 전달한다.
*/
@IBAction func selectPanType(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
dragTyep = .x
case 1:
dragTyep = .y
case 2:
dragTyep = .none
default:
break
}
myView.dragType = self.dragTyep
}
}
- DraggbleView.swift
//
// DraggbleView.swift
// panGesture
//
// Created by yoon-yeoungjin on 2022/03/26.
//
import Foundation
import UIKit
class DraggbleView: UIView {
var dragType = dtype.none
override init(frame: CGRect) {
super.init(frame: CGRect.zero)
let pan = UIPanGestureRecognizer(target: self, action: #selector(dragging))
self.addGestureRecognizer(pan)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc func dragging(pan: UIPanGestureRecognizer){
switch pan.state {
case .began:
print("began pan gesture")
case .changed:
let delta = pan.translation(in: self.superview)
var myPosition = self.center
/**
제한한 축만 움직힐 수 있도록 셋팅
*/
if dragType == .x {
myPosition.x += delta.x
} else if dragType == .y {
myPosition.y += delta.y
} else if dragType == .none {
myPosition.x += delta.x
myPosition.y += delta.y
} else {
print("[ERROR] none dtype")
exit(1)
}
print("x : ", myPosition.x, " y: ", myPosition.y)
self.center = myPosition
pan.setTranslation(CGPoint.zero, in: self.superview)
case .ended, .cancelled:
print("end pan gesture")
/**
화면 밖을 넘어가면 다시 돌아오게 셋팅
*/
if self.frame.minX < 0 {
self.frame.origin.x = 0
}
if self.frame.maxX > (self.superview?.frame.maxX ?? 0) {
if let hasSuperView = self.superview {
self.frame.origin.x = hasSuperView.frame.maxX - self.bounds.width
}
}
if self.frame.minY < 126 {
self.frame.origin.y = 126
}
if self.frame.maxY > (self.superview?.frame.maxY ?? 0) {
if let hasSuperViewY = self.superview {
self.frame.origin.y = hasSuperViewY.frame.maxY - self.bounds.width
}
}
@unknown default:
print("err")
}
}
}
- 구동 화면
Author And Source
이 문제에 관하여(Pan Gesture 사용 - 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@palinyee12/Pan-Gesture-사용-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)