3D 터치 버튼 동작을 시뮬레이션한 HapticButon 라이브러리 (MIT 라이센스)
개시하다
3D 터치로 버튼을 눌렀을 때 튀어나온 애니메이션을 시뮬레이션해 본 Haptic Buton.애니메이션은 다음과 같은 느낌을 준다.
※ 인용github/HapticButton
환경 확인
다음 환경을 사용합니다.
iOS/Swift Version에 대한 라이센스
가능한 일
다음과 같은 일을 할 수 있다.
.label(text: String)
또는 .image(image: UIImage)
구체적 예
label 지정blur 없음delegate 정의 방법 사용하기
class ViewController: UIViewController {
@IBOutlet weak var button: HapticButton!
override func viewDidLoad() {
super.viewDidLoad()
button.mode = .label(text: "Hello! 👋")
button.delegate = self
}
extension ViewController: HapticButtonDelegate {
func pressed(sender: HapticButton) {
print("White button pressed.")
}
}
이미지 지정lightBlur_addTaget을 통한 메서드 정의class ViewController: UIViewController {
@IBOutlet weak var blurButton: HapticButton!
override func viewDidLoad() {
blurButton.mode = .image(image: #imageLiteral(resourceName: "imageName"))
blurButton.addBlurView(style: .light)
blurButton.addTarget(self, action: #selector(blurButtonPressed(_:)), for: .touchUpInside)
}
func blurButtonPressed(_ sender: HapticButton) {
print("Light blur button pressed.")
}
}
label 지정darkBlur_closure를 통해 정의하는 방법class ViewController: UIViewController {
@IBOutlet weak var darkBlurButton: HapticButton!
override func viewDidLoad() {
darkBlurButton.mode = .label(text: "Hello Blur!")
darkBlurButton.textLabel.textColor = .white
darkBlurButton.addBlurView(style: .dark)
darkBlurButton.onPressed = {
print("Dark blur button pressed.")
}
}
}
보태다
UIImpactFeedbackGenerator
를 사용한 피드백이 실현됐기 때문에 아이폰7, 아이폰7 플러스에서 눌렀을 때의 피드백을 느낄 수 있다.touchesMoved(_ touches: Set<UITouch>, with event: UIEvent)
에서 계산touch.force / touch.maximumPossibleForce
으로 전환된 scale로 CGAffineTransform
로 진행한다.감상
버튼에 3D 터치 눌렀을 때의 행동을 아주 간단하게 덧붙여서 재미있게 봤습니다.다만, 버튼을 눌렀을 때의 행동은 자연스럽게 하기는 어려울 수 있다.
참고 문헌
BalestraPatrick/HapticButton
Reference
이 문제에 관하여(3D 터치 버튼 동작을 시뮬레이션한 HapticButon 라이브러리 (MIT 라이센스)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/iganin/items/f45703c8f7634cf9d255텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)