Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Observable
- UITextView
- ios
- 애니메이션
- UICollectionView
- combine
- uitableview
- clean architecture
- 스위프트
- RxCocoa
- Clean Code
- 리팩토링
- swift documentation
- MVVM
- Refactoring
- ribs
- SWIFT
- HIG
- 리펙토링
- Protocol
- 클린 코드
- Xcode
- collectionview
- Human interface guide
- uiscrollview
- swiftUI
- 리펙터링
- map
- tableView
- rxswift
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 멀티 터치 isMultipleTouchEnabled, isExclusiveTouch, allowUserInteraction 개념 및 차이 본문
iOS 응용 (swift)
[iOS - swift] 멀티 터치 isMultipleTouchEnabled, isExclusiveTouch, allowUserInteraction 개념 및 차이
jake-kim 2023. 8. 5. 01:07isMultipleTouchEnabled 개념
- 멀티 터치라는 것은 동시에 터치한다는 것이 아니고, 자기 자신의 뷰의 중복 터치를 막는다는 의미
- 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 값
isExclusiveTouch 개념
- 다른 뷰를 누른 상태에서 해당 뷰를 누르면 선택이 안됨
- bButton의 isExclusiveTouch = true로 설정해놓으면 and조건과 같이, a버튼을 누른 상태에서 b버튼을 누르지 못하고, b버튼을 누른 상태에서 다른 버튼을 선택하지 못함
- isExclusiveTouch의 디폴트 값은 false
ex) bButton의 isExclusiveTouch = true로 해놓은 상태
- bButton을 long press 한 상태에서 어떤 뷰도 터치 불가능
- 다른 뷰를 long press 한 상태에서 bButton 터치 불가능
bButton.isExclusiveTouch = true
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의 터치가 계속 가능)
정리
- 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
'iOS 응용 (swift)' 카테고리의 다른 글
Comments