![]() | ![]() |
---|
애플로그인버튼을 커스텀 해봤습니다
방법은 zstack 으로 먼저 커스텀한 애플로그인뷰를 만들어놓고
Image("appleLogin")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: SignSpace.screenWidth - 40, height: 55)
그 위에다가 진짜 애플로그인 버튼을 쌓습니다
ZStack {
Image("appleLogin")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: SignSpace.screenWidth - 40, height: 55)
AppleSignInButton()
.frame(width: SignSpace.screenWidth - 40, height: 55)
}
그리고 제일중요한 수정자를 넣어야하는데요
https://developer.apple.com/documentation/swiftui/view/blendmode(_:)
blendMode(_:)이 수정자를 사용해서 zstack안에 있는 뷰들을 혼합시킬겁니다.
.blendMode(.overlay)
그리고 기존 애플로그인의 투명도를 0.02로 두고 안보이도록 합니다
.opacity(0.02)
만약에 0.01로 두고 작업하시면 버튼이 안눌리실겁니다!! 이유는 몰루 ..?
이렇게만 하면 버튼이 안눌릴텐데요 ! 제일중요한 수정자를 넣으면 해결이 됩니다!
바로 뭐냐면
allowsHitTesting(_:) 이 수정자를 넣어야 해요 ~ !
이것이 무엇이냐
https://developer.apple.com/documentation/assignables/assignabledocumentview/allowshittesting(_:)/
allowsHitTesting(_:)는 SwiftUI에서 뷰가 터치 이벤트나 다른 형태의 사용자 인터랙션을 받을 수 있는지 여부를 제어하는 수정자입니다. 이 수정자는 뷰가 사용자 인터랙션을 받을 수 있도록 할지 또는 무시할지를 결정합니다. 기본값은 true이며, 이는 뷰가 터치 이벤트를 받을 수 있음을 의미합니다.
라고 하는데요.
즉 이는 버튼이 시각적으로는 여전히 투명하지만, SwiftUI에서는 여전히 터치 이벤트를 받을 수 있게 합니다. 그리고 allowsHitTesting(true)를 사용하여 투명한 뷰가 터치 이벤트를 받을 수 있게 했습니다.
ZStack {
Image("appleLogin")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: SignSpace.screenWidth - 40, height: 55)
AppleSignInButton()
.frame(width: SignSpace.screenWidth - 40, height: 55)
.blendMode(.overlay)
.opacity(0.02)
.allowsHitTesting(true)
}