UIView旋转45度后消失了?

8
也许我不理解。当我理解时
self.tweetPeak.transform = CGAffineTransformMakeRotation(RADIANS(45));

RADIAN是什么

#define RADIANS(degrees) ((degrees * M_PI) / 180.0)

在一个简单的UIView对象上,它会消失。

我猜这只是因为它太细了,以至于看不见。我的印象是,在20到45度之间,视图会变小。

这是什么?我尝试设置视图为不透明,但没有效果。

克里斯


它是否可能被旋转到屏幕之外了? - Richard J. Ross III
不相关,但“RADIONS”是那个定义的可怕名称。它没有表明它在做什么或如何使用它。 - Paul.s
@Paul.s 这是一个风格问题,我认为这是宏的一个很好的名称,但我也见过它被标记为 TO_RADIANSDEGREES_TO_RADIANS 等等。这实际上取决于你需要什么。 - Richard J. Ross III
“RADIANS”这个函数太模糊了,我应该输入弧度、标准化值还是角度呢?它返回的是弧度吗?需要将其转换为角度吗?还是将其存储在某个地方……谁知道呢。相比之下,“DEGREES_TO_RADIANS”似乎更具描述性。 - Paul.s
我也尝试过使用您的#define和普通UIView,一切都正常,可能存在其他问题。 - Marco Grassi
显示剩余2条评论
2个回答

12

在旋转之后,您需要停止调整框架,这会导致变换矩阵被拉伸,我不确定正式原因是什么,但这与苹果使用自己的矩阵系统来表示2D / 3D转换/旋转/缩放有关。前些天我也遇到了同样的问题,为了解决它,我没有旋转那个视图,而是将其作为一个容器,内部放置我想要旋转的实际视图,并旋转了该容器。


3
CGAffineTransform和CATransform3D都是绝对标准、传统的矩阵。苹果在这方面没有做任何奇怪的事情。你的问题在于-[CALayer frame]是一个派生值——它基于position、bounds、anchorPoint和transform属性。如果你更改了transform,frame也会改变。如果你尝试更改frame,图层将尝试调整position和bounds.size以使其正常工作。解决方案:不要设置frame。 - Kurt Revis
如果CATransform3D是一个传统的矩阵,为什么我不能设置一个传统的正交矩阵并且仍然能看到我的图层呢?或者说一个透视矩阵呢?我的意思不是怀疑你,但它们并没有完全按照传统方式使用,为什么.m34控制类似于视野的东西呢?如果你问我,这些都不太标准。但我可能错了。 - a_nub
我已经搜索了相当长一段时间,试图弄清楚这个问题。您的两条评论确实帮助我理解了我的问题。对于其他遇到此问题的人...我有一些初始化,我想旋转一些标签。我将其放在viewDidLoad中...但是我必须将其移动到viewDidAppear以使事情正常工作(因为直到viewWillAppear之后仍在设置框架)。 - Danny Sung

1

对我来说,解决方案是将imageView的内容模式设置为.center

imageView.contentMode = .center


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接