【问题标题】:Rotation & Pinch(scale) gesture messes parent UIView and his subviews frame旋转和捏(缩放)手势混淆父 UIView 和他的子视图框架
【发布时间】:2016-02-24 17:55:13
【问题描述】:

我正在尝试在包含多个子视图(UIButton、UITextView)的 UIView 上实现捏合和旋转手势。 为方便起见,在下面整理了代码

我猜我错过了什么。不知道是什么。谢谢!

结果:

代码

规模:

 var scaleAnchorPoint = CGPoint()

    func handleSizeIncreasing(sender:UIPinchGestureRecognizer) {
        if sender.state == UIGestureRecognizerState.Began
        {
            print("Began")
            scaleAnchorPoint = self.center
        }

        else if sender.state == UIGestureRecognizerState.Changed
        {
            txtView.transform = CGAffineTransformScale(txtView.transform, sender.scale, sender.scale)
            sender.scale = 1.0
            self.frame.size = CGSizeMake(txtView.frame.width + buttonSize, txtView.frame.height + buttonSize)
            self.center = scaleAnchorPoint
            updateViews(scaleAnchorPoint)
            print("Changed")
        }

    }

旋转:

var rotateAnchorPoint = CGPoint()

func handleRotate(sender : UIRotationGestureRecognizer) {

    if sender.state == UIGestureRecognizerState.Began
    {
        print("Began")
        rotateAnchorPoint = self.center
    }

    else if sender.state == UIGestureRecognizerState.Changed
    {
        sender.view!.transform = CGAffineTransformRotate(sender.view!.transform, sender.rotation)
        sender.rotation = 0
        updateViews(rotateAnchorPoint)
        print("Changed")
    }



}

侧面:

 func updateViews(aroundPoint : CGPoint  )
    {
        self.center = aroundPoint
        txtView.frame.origin = CGPointMake(buttonSize / 2, buttonSize / 2)
        txtView.contentSize = txtView.frame.size
    }
    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

【问题讨论】:

    标签: objective-c swift uiview uigesturerecognizer scale


    【解决方案1】:

    想通了。简单地说,当比例/框架发生变化时,而不是像我在这里那样访问Frameself.frame.size = CGSizeMake(txtView.frame.width + buttonSize, txtView.frame.height + buttonSize)

    访问 self.bounds ,像这样 -

     self.bounds.size = CGSizeMake(txtView.frame.width + buttonSize, txtView.frame.height + buttonSize)
    

    享受吧!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多