gpt4 book ai didi

ios - 旋转后使用 AspectFit 将 UIView 保持在图像上的同一位置

转载 作者:行者123 更新时间:2023-11-30 11:42:16 27 4
gpt4 key购买 nike

我有一个应用程序,用户可以将形状放置到图像上。该图像位于设置为 AspectFit 的 UIImageView 中。 UIImageView 位于 UIScrollView 中,允许缩放和平移。这些形状是添加到 UIImageView 的 UIView。除了设备方向发生变化之外,一切工作正常。由于图像设置为 AspectFit 并且方向发生变化,纵横比也会发生变化。因此,我的形状不会在图像上保持相同的位置。

旋转前: enter image description here

旋转后: enter image description here

ViewController代码:

override func viewDidLoad() {
super.viewDidLoad()

imageView.image = markupUIImage;

scrollView.maximumZoomScale=5;
scrollView.minimumZoomScale=0.5;
scrollView.bounces=true;
scrollView.bouncesZoom=true;
scrollView.contentSize=CGSize(width: imageView.frame.size.width, height: imageView.frame.size.height);
scrollView.showsHorizontalScrollIndicator=true;
scrollView.showsVerticalScrollIndicator=true;
scrollView.delegate=self;
}

func viewForZooming(in scrollView: UIScrollView) -> UIView?
{
return self.imageView
}

形状类:

class ShapeUIView: UIView {

override public class var layerClass: Swift.AnyClass {
get {
return CAShapeLayer.self;
}
}

override init(frame: CGRect) {
super.init(frame: frame)
initializeView()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initializeView()
}

private func initializeView(){

let shapeLayer = (layer as! CAShapeLayer);
shapeLayer.opacity = 1.0
shapeLayer.lineJoin = kCALineJoinRound
shapeLayer.lineWidth = 2.0
shapeLayer.strokeColor = UIColor(red: 0, green: 0, blue: 0, alpha: 1.0).cgColor
shapeLayer.fillColor = UIColor(red: 0, green: 128, blue: 0, alpha: 0.3).cgColor

self.isUserInteractionEnabled = true;
self.alpha = 1.0;
self.isHidden = false;
}

public func setPath(_ path: UIBezierPath) {
(layer as! CAShapeLayer).path = path.cgPath;
}
}

如何使形状在旋转后保持在图像上的同一位置?

最佳答案

我能够弄清楚我自己的问题。在此发布以防其他人遇到此问题。

我所做的就是设置 UIImageView.contentMode = .center 并将 UIImageView 大小设置为与图像相同的高度和宽度。然后我让 UIScrollView 做它的事情并缩放图像。因此,由于 AspectFit 和 UIScrollView 缩放图像,我没有同时使用 UIImageView 缩放图像。我将以下内容放入 UIViewController 中:

override func viewDidAppear(_ animated: Bool) {

//Initial Scale
imageView.bounds.size.width = (imageView.image?.size.width)!;
imageView.bounds.size.height = (imageView.image?.size.height)!;
imageView.frame = CGRect(x: 0, y: 0, width: imageView.bounds.size.width, height: imageView.bounds.size.height)

let widthScale: CGFloat = scrollView.width / imageView.image!.size.width;
let heightScale: CGFloat = scrollView.height / imageView.image!.size.height;
let initialZoom = min(widthScale, heightScale);

scrollView.setZoomScale(initialZoom, animated: false)
}

现在,当我的形状绘制在图像上并且旋转设备时,它们会保持在正确的位置。

关于ios - 旋转后使用 AspectFit 将 UIView 保持在图像上的同一位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49197417/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com