在swift

时间:2017-09-08 05:13:42

标签: ios swift viewcontroller

我正在创建一个iOS应用程序(swift),我在视图控制器中有多个标签。我没有使用任何scrollView。我需要在捏合手势上缩放视图控制器。 我知道我已经找到了滚动视图的解决方案,但我不想在视图控制器中实现scrollView。 任何帮助,将不胜感激!谢谢。

更新:

我在视图控制器中实现了一个scrollView。我在scrollview中添加了一个视图,该视图包含一些标签,但我现在面临的问题是:

  1. 缩放不会保持静止。这就是我释放手指后,滚动视图会自动缩放到原始状态。

  2. 当视图控制器处于原始状态时,应用程序崩溃。

  3. 这是我的代码:

    @IBOutlet weak var scrollView: UIScrollView!
    
    @IBOutlet var viewThis: UIView!
    
    override func viewDidLoad() {
    
        super.viewDidLoad()
    
        scrollView.delegate = self
    
        //let gesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchAction(sender:)))
        //self.view.addGestureRecognizer(gesture)
    
        // Do any additional setup after loading the view.
    
        let scrollViewFrame = scrollView.frame
    
        let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
    
        let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
    
        let minScale = min(scaleWidth, scaleHeight);
    
        scrollView.minimumZoomScale = minScale
    
        scrollView.maximumZoomScale = 1.0
    
        scrollView.zoomScale = minScale;
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    
        return viewThis
    }
    

2 个答案:

答案 0 :(得分:4)

感谢@YunCHEN帮助我解决这个问题。他告诉我代码中发生了什么。我遇到了一个问题,当缩小时,我的应用程序曾经崩溃,因为与视图宽度和高度相比,它已超出限制。如果有人在将来发现同样的问题,我已经更新了答案。

步骤1:在视图控制器中添加scrollView。

步骤2:在scrollView上添加视图。

步骤3:在此视图上添加对象库中的所有项目/对象。

步骤4:将scrollView和视图绑定到代码中的视图控制器。还要添加UIScrollViewDelegate。

步骤5:执行以下操作。

以下是代码:

@IBOutlet weak var scrollView: UIScrollView!

@IBOutlet var viewThis: UIView!

override func viewDidLoad() {

    super.viewDidLoad()

    scrollView.delegate = self

    scrollView.minimumZoomScale = 1.0;

    scrollView.maximumZoomScale = 3.0

    scrollView.zoomScale = 1.0
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func viewForZooming(in scrollView: UIScrollView) -> UIView? {

    return viewThis
}

再次感谢@YunCHEN帮助我!

答案 1 :(得分:3)

UIView的transform属性可以使视图及其子视图更小或更大,如缩放效果。使用UIPinchGestureRecognizer的示例:

class ExampleViewController: UIViewController {

    var previousScale:CGFloat = 1.0

    override func viewDidLoad() {
        super.viewDidLoad()

        let gesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchAction(sender:)))
        self.view.addGestureRecognizer(gesture)
    }

    func pinchAction(sender:UIPinchGestureRecognizer) {
        let scale:CGFloat = previousScale * sender.scale
        self.view.transform = CGAffineTransform(scaleX: scale, y: scale);

        previousScale = sender.scale
    }
}

也许你需要考虑在缩放后调整视图的位置,使用CGAffineTransform(translationX: , y: )来做到这一点。

仍然同意UIScrollView是进行缩放的最简单方法。