#ios #swift #swiftui #uikit #cgaffinetransform
Вопрос:
Я использую UIViewRepresentable в своем приложении. Я хочу повернуть представление, для которого я использую CGAffineTransform. Но он изменяет размер представления, он пытается вписать представление в рамку.
Вот мой код
Uiviewпредставляемый
struct UICardView: UIViewRepresentable { var imageName: String var width: CGFloat = UIScreen.screenWidth var height: CGFloat = UIScreen.screenHeight var card = UIImageView() class Coordinator: NSObject, UIGestureRecognizerDelegate { var parent: UICardView var view: UIView init(_ parent: UICardView, _ view: UIView) { self.parent = parent self.view = view } @objc func handleTap(tap: UITapGestureRecognizer) { view.transform = CGAffineTransform(rotationAngle: .pi / 2) } public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -gt; Bool { return true } } func makeCoordinator() -gt; UICardView.Coordinator { Coordinator(self, card) } func makeUIView(context: Context) -gt; UIView { card.frame = CGRect(x: 0, y: 0, width: width, height: height) card.image = UIImage(named: self. imageName) card.layer.cornerRadius = 10 card.clipsToBounds = true card.contentMode = .scaleAspectFit card.isUserInteractionEnabled = true let tapGesture = UITapGestureRecognizer(target: context.coordinator, action: #selector(Coordinator.handleTap(tap:))) tapGesture.delegate = context.coordinator card.addGestureRecognizer(tapGesture) return card } func updateUIView(_ uiView: UIView, context: Context) { } }
Я использую contentMode .scaleToFit, поэтому сейчас он пытается вписаться в кадр, но даже с заливкой или без какого-либо режима содержимого это приводит к неожиданному поведению
Это мой код SwiftUI
struct CardView: View { var body: some View { UICardView( imageName: "SampleImage") .frame(width: UIScreen.screenWidth, height: UIScreen.screenHeight, alignment: .top) } }
Комментарии:
1. С инструментами SwiftUI не было бы необходимости в старом api UIKIT, таком как CGAffineTransform!