【问题标题】:Transform makes sizes different变换使尺寸不同
【发布时间】:2016-11-10 16:59:30
【问题描述】:

我有一个旋转盒子的功能,效果很好。当用户完成旋转时,我想将父视图适合旋转框,但它完全不成比例,我不知道为什么,因为我只是在旋转视图和父视图之间交换尺寸和属性.

旋转:

func rotateThisView(gesture : UIRotationGestureRecognizer){
    if activated {
        if gesture.state == .Began || gesture.state == .Changed {
            wrapView.transform = CGAffineTransformRotate(wrapView.transform, gesture.rotation)
            gesture.rotation = 0
        }
    }
}

如前所述,这可以正常工作,但是当用户完成编辑(旋转)后,我运行此功能:

    wrapPoints = wrapView.center
    wrapDimensions = wrapView.frame
    wrapRotation = wrapView.transform

    print(wrapPoints, wrapDimensions, wrapRotation)
    wrapView.frame = CGRect(x: 0, y: 0, width: wrapDimensions.width, height: wrapDimensions.height)
    wrapView.transform = CGAffineTransformIdentity
    wrapView.center = center

    frame = CGRect(x: 0, y: 0, width: wrapDimensions.width, height: wrapDimensions.height)
    center = wrapPoints
    transform = wrapRotation

这就是一切不成比例的地方。我已经包含了两个屏幕截图来显示发生了什么。父视图变大,旋转后的视图变得异常大。

希望有人可以帮助我。

【问题讨论】:

  • 你真的想用它的超级视图来改变它的框架吗?
  • 是的,它是一个自定义 UIView 类

标签: ios swift core-graphics core-animation


【解决方案1】:

你应该把wrapView.frame = CGRect(x: 0, y: 0, width: wrapDimensions.width, height: wrapDimensions.height)的位置换成wrapView.transform = CGAffineTransformIdentity的位置

            wrapView.transform = CGAffineTransformIdentity
            wrapView.frame = CGRect(x: 0, y: 0, width: wrapDimensions.width, height: wrapDimensions.height)
            wrapView.center = center

【讨论】:

  • 不幸的是没有区别
  • 你能提供一个示例项目吗?我们需要更多信息来帮助您
  • 很遗憾,我不能。我通过围绕旋转视图制作另一个视图并将站点设置为该视图来解决它。它看起来相当笨重,但它确实有效。不过,我仍然想看看如何在一个视图中解决它
猜你喜欢
  • 2020-12-26
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2015-02-28
  • 2020-08-15
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多