gpt4 book ai didi

ios - iOS8下CGAffineTransform Make Rotation和Auto Layout问题

转载 作者:技术小花猫 更新时间:2023-10-29 10:52:53 24 4
gpt4 key购买 nike

在简单的 UIView 上应用旋转变换之后

CGAffineTransform trans = CGAffineTransformMakeRotation(M_PI * -0.5);

simpleVIew_.transform = trans;

有以下约束

[self addConstraints:@[
[NSLayoutConstraint constraintWithItem: simpleView_ attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual
toItem:nil attribute:NSLayoutAttributeNotAnAttribute
multiplier:1 constant:50],

[NSLayoutConstraint constraintWithItem: simpleView_ attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual
toItem:self attribute:NSLayoutAttributeHeight
multiplier:1 constant:270],

[NSLayoutConstraint constraintWithItem: simpleView_ attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual
toItem:self attribute:NSLayoutAttributeLeft
multiplier:1.0 constant:0],

[NSLayoutConstraint constraintWithItem: simpleView_ attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual
toItem:self attribute:NSLayoutAttributeBottom
multiplier:1.0 constant:0]

]];

我在 iOS7.1 和 iOS8 beta 5 之间得到两个不同的结果:

iOS7.1

<UIView: 0x1655d990; frame = (0 30; 50 270); transform = [0, -1, 1, 0, 0, 0]; opaque = NO; layer = <CALayer: 0x1655dab0>

iOS8 测试版 5

<UIView: 0x16e5a530; frame = (-110 140; 270 50); transform = [0, -1, 1, 0, 0, 0]; opaque = NO; layer = <CALayer: 0x16e61880>>

请注意框架中的差异 - 宽度/高度值已切换并且 x,y 坐标已更改。

知道为什么 7.1 和 8 之间存在如此巨大的差异吗?

最佳答案

不是真正的解决方案,而是更多的解决方法。

我发现在 iOS 8 和 iOS 7 上构建时,使用 CGAffineTransformMakeRotation 时,顶部、底部、左侧和右侧约束的行为不同。但是,CenterX 和 CenterY 的行为相同。此外,只要您 addConstraint 到与 constraintWithItem 相同的 View ,高度和宽度约束将表现相同。

因此,如果您可以将使用 CGAffineTransformMakeRotation 的 View 的约束更改为仅使用高度、宽度、CenterX、CenterY,那么在两个 iOS 版本上构建时,您应该能够使相同的约束看起来相同。

下面是我自己的代码,无论 iOS 版本如何,它都会给我相同的布局:

// Rotate View 90º
endorseHereLabel.transform = CGAffineTransformMakeRotation(-(M_PI)/2);

[self addSubview:endorseHereLabel];
[self bringSubviewToFront:endorseHereLabel];

// Configure Constraints
[self addConstraint:[NSLayoutConstraint constraintWithItem:endorseHereLabel
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:lineView1
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:40.0]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:endorseHereLabel
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:lineView1
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:kBottomBuffer]];
[endorseHereLabel addConstraint:[NSLayoutConstraint constraintWithItem:endorseHereLabel
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:12.0]];
[endorseHereLabel addConstraint:[NSLayoutConstraint constraintWithItem:endorseHereLabel
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:250.0]];

关于ios - iOS8下CGAffineTransform Make Rotation和Auto Layout问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25261901/

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