gpt4 book ai didi

ios - 支持部分 UI(但并非全部)的方向更改

转载 作者:行者123 更新时间:2023-11-30 12:34:50 25 4
gpt4 key购买 nike

我正在制作一个绘图应用程序,我希望用户能够旋转他们的设备并以任何方向在 Canvas 上绘图。画笔/颜色/等工具栏需要更改方向以始终位于屏幕顶部,但是绘图 Canvas 不需要更改方向(以便保留绘图的方向;想象一下旋转一张上面有绘图的纸- 绘图有时会是侧面或颠倒的,但你的铅笔仍然在你的面前)。

我已经尝试了几次,并得出结论,我确实希望支持 iOS 的默认方向更改,因为像 UIAlert 弹出窗口这样的东西需要正确定向。在 View Controller 上实现 override varsupportedInterfaceOrientations: UIInterfaceOrientationMask 并不是最佳选择。

通过订阅设备方向更改通知并向相反方向旋转绘图 Canvas 以补偿默认的 UI 方向旋转,我已经更接近了。在本例中,我将 90、-90、0 或 180 度的 CGAffineTransform 旋转应用于 Canvas 容器 View ,但其 subview 未随之正确旋转。

为了获得我想要的行为,我可能缺少任何想法吗?

这就是我想要的。请注意,工具栏在旋转后始终定向到顶部,但绘图仍粘在设备上。

方向改变之前:

方向改变后:

最佳答案

我做了一个快速测试应用程序,看看您是否经历过什么(关于旋转 Canvas View 并且不旋转其 subview )并且我无法复制您所看到的内容。

我只是在主视图的 viewDidLoad 上设置了一个观察者:

NotificationCenter.default.addObserver(self, selector:#selector(self.orientationChanged(_:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object:nil)

方向改变通知的处理方式如下:

func orientationChanged(_ n:Notification) {
let orientation = UIDevice.current.orientation
if orientation == UIDeviceOrientation.portrait {
// No rotation
vwCanvas.transform = CGAffineTransform(rotationAngle:0)
} else if orientation == UIDeviceOrientation.portraitUpsideDown {
// Rotate canvas 180 degrees
vwCanvas.transform = CGAffineTransform(rotationAngle:CGFloat.pi)
} else if orientation == UIDeviceOrientation.landscapeLeft {
// Rotate canvas 90 degrees counterclockwise
vwCanvas.transform = CGAffineTransform(rotationAngle:CGFloat.pi/2.0)
} else if orientation == UIDeviceOrientation.landscapeRight {
// Rotate canvas 90 degrees clockwise
vwCanvas.transform = CGAffineTransform(rotationAngle:-CGFloat.pi/2.0)
}
}

这是我的纵向屏幕:

enter image description here

这是旋转后的版本: enter image description here

正如您所注意到的,上面的 subview 也会旋转。所以只是想知道我的版本和你的版本之间有什么区别(因为我不知道你的代码是什么样的),当你旋转 Canvas 时, subview 不会旋转......

关于ios - 支持部分 UI(但并非全部)的方向更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43012030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com