变换使尺寸不同

Posted

技术标签:

【中文标题】变换使尺寸不同【英文标题】: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 类 【参考方案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

【讨论】:

不幸的是没有区别 你能提供一个示例项目吗?我们需要更多信息来帮助您 很遗憾,我不能。我通过围绕旋转视图制作另一个视图并将站点设置为该视图来解决它。它看起来相当笨重,但它确实有效。不过,我仍然想看看如何在一个视图中解决它

以上是关于变换使尺寸不同的主要内容,如果未能解决你的问题,请参考以下文章

如何使我的自定义 HTML 小部件针对不同的屏幕尺寸显示不同?

使游戏响应(适合不同的屏幕尺寸)

如何通过一次声明使字体大小响应不同尺寸的设备[重复]

xcode ios - 如何使图像适合不同的屏幕尺寸

当您有不同高度的页面时,如何使页脚位于所有屏幕尺寸的底部?

OpenCV对图像进行尺寸变换