Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 멀티 터치 isMultipleTouchEnabled, isExclusiveTouch, allowUserInteraction 개념 및 차이 본문

iOS 응용 (swift)

[iOS - swift] 멀티 터치 isMultipleTouchEnabled, isExclusiveTouch, allowUserInteraction 개념 및 차이

jake-kim 2023. 8. 5. 01:07

isMultipleTouchEnabled 개념

  • 멀티 터치라는 것은 동시에 터치한다는 것이 아니고, 자기 자신의 뷰의 중복 터치를 막는다는 의미
  • isMultiTouchEnabled = true이면 오른손으로 aButton을 누른 상태에서 왼손으로 aButton을 누르면 선택이 가능
  • (isMultiTouchEnabled의 default값은 false)
extension UIView {

    open var frame: CGRect

    open var bounds: CGRect

    open var center: CGPoint

    open var transform: CGAffineTransform

	...

    open var isMultipleTouchEnabled: Bool // <-
    
    ...
}

ex) aButton은 isMultipleTouchEnabled를 false로 한 경우 (bButton도 디폴트로 냅두었기 때문에 false)

  • aButton을 long press 후 > aButton은 안눌리고 bButton은 눌림
aButton.isMultipleTouchEnabled = false // default 값

isMultipleTouchEnabled = false로 하면 자기 자신의 중복 터치만 막는다는 의미

isExclusiveTouch 개념

  • 다른 뷰를 누른 상태에서 해당 뷰를 누르면 선택이 안됨
    • bButton의 isExclusiveTouch = true로 설정해놓으면 and조건과 같이, a버튼을 누른 상태에서 b버튼을 누르지 못하고, b버튼을 누른 상태에서 다른 버튼을 선택하지 못함
  • isExclusiveTouch의 디폴트 값은 false

ex) bButton의 isExclusiveTouch = true로 해놓은 상태

  • bButton을 long press 한 상태에서 어떤 뷰도 터치 불가능
  • 다른 뷰를 long press  한 상태에서 bButton 터치 불가능
bButton.isExclusiveTouch = true

aButton을 터치한 상태에서 bButton터치가 안되고, bButton을 터치한 상태에서 aButton터치 불가능

allowUserInteraction 개념

  • 뷰가 애니메이션되는 도중에 다른 뷰의 터치를 활성화 여부를 결정

https://developer.apple.com/documentation/uikit/uiview/animationoptions/1622440-allowuserinteraction

  • 보통 UIView.animate를 사용할 때, options 프로퍼티가 있는데 여기에 사용이 가능

  • UIView.animate를 사용할 때 애니메이션 옵션이며, 애니메이션이 동작하는 뷰의 터치를 애니메이션 도중에 활성화 할것인지 여부
    • allowUserInteraction를 추가하지 않으면 해당 뷰가 애니메이션 도중에 터치가 막힘
    • allowUserInteraction를 사용하면 해당 뷰가 애니메이션 도중에도 터치가 가능

ex) allowUserInteraction 추가를 안한 경우 - 다시 해당 뷰를 터치해도 터치가 먹히지 않음

주의) 다른 뷰는 interaction 가능

@objc private func tapAnimationButton() {
    UIView.animate(
        withDuration: 5,
        delay: 0,
        options: [],
        animations: {
            self.label.alpha = 0
            self.animationButton.alpha = 0
        }
    )
}
  • 만약 allowUserInteraction를 추가하면 중복 터치가 가능
UIView.animate(
    withDuration: 5,
    delay: 0,
    options: .allowUserInteraction,
    animations: {
        self.label.alpha = 0
        self.animationButton.alpha = 0
    }
)

(애니메이션 도중에도 애니메이션이 들어갈 animationButton의 터치가 계속 가능)

allowUserInteraction가 추가되어서&nbsp;애니메이션 도중에도 터치가 계속 가능

정리

  • isMultipleTouchEnabled와 isExclusiveTouch 차이점?
    • isMultipleTouchEnabled는 자기 자신의 뷰 중복 터치 활성화 여부
    • isExclusiveTouch는 다른 뷰와의 동시 터치를 막는 것
  • allowUserInteraction은?
    • UIView.animate를 사용할 때 애니메이션 옵션이며, 애니메이션이 동작하는 뷰의 터치를 애니메이션 도중에 활성화 할것인지 여부

* 전체 코드: https://github.com/JK0369/ExMultiTouch.git

* 참고

https://developer.apple.com/documentation/uikit/uiview/animationoptions/1622440-allowuserinteraction

https://developer.apple.com/documentation/uikit/uiview/1622453-isexclusivetouch

https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_touches_in_your_view/implementing_a_multi-touch_app

 

 

Comments