在Swift中使用UIScrollview旋转UIView

4

当我在UIScrollView中旋转视图时,经过一些旋转/缩放手势后,视图会移出UIScrollView并完全消失。只要缩放比例为1,它就可以正常工作。 我的代码需要怎么修改才能避免这种情况?

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

    let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)
    let rotationView = UIView()


    override func viewDidLoad() {
        super.viewDidLoad()

            let imageView = UIImageView()
                view.addSubview(scrollView)

                scrollView.delegate = self
                scrollView.minimumZoomScale = 0.5
                scrollView.maximumZoomScale = 2

                let mapImage = UIImage(named: "BMS2_300.jpg")

                imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:mapImage!.size)
                imageView.image = mapImage

                let rotationViewframe = CGRectMake(0, 0, imageView.frame.size.width, imageView.frame.size.height)
                rotationView.frame = rotationViewframe

                rotationView.addSubview(imageView)
                //rotationView.sizeToFit()

                scrollView.addSubview(rotationView)
                scrollView.contentSize = CGSize(width: rotationView.bounds.width, height: rotationView.bounds.height)
                scrollView.bringSubviewToFront(rotationView)
                scrollView.contentOffset = CGPoint(x: rotationView.frame.width/2, y: rotationView.frame.height/2)

            let mapRotGestureRecognizer = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.rotateMap(_:)))
                rotationView.addGestureRecognizer(mapRotGestureRecognizer)

    }

    func rotateMap(sender: UIRotationGestureRecognizer) {
        let radians = sender.rotation

        if let senderView = sender.view {
            senderView.transform = CGAffineTransformRotate(senderView.transform, radians)
            sender.rotation = 0
        }

    }


    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return self.rotationView
    }

    func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat) {
        scrollView.contentSize = rotationView.frame.size
    }
1个回答

3
解决方法是在滚动视图下添加一个额外的uiview,因此新的holderView是滚动视图的子视图,而rotatonView是holderView的子视图。

谢谢,这节省了我一些时间!! - cleverbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接