iOS8下的CGAffineTransformMakeRotation和Autolayout问题
在简单视图上应用旋转变换后iOS8下的CGAffineTransformMakeRotation和Autolayout问题,ios,objective-c,ios8,Ios,Objective C,Ios8,在简单视图上应用旋转变换后 CGAffineTransform trans = CGAffineTransformMakeRotation(M_PI * -0.5); simpleVIew_.transform = trans; 其中有以下限制 [self addConstraints:@[ [NSLayoutConstraint constraintWithItem: simpleView_ attribute:NSLayoutAttributeWidth relatedBy:NSL
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之间得到了两个不同的结果:
第7.1条
<UIView: 0x1655d990; frame = (0 30; 50 270); transform = [0, -1, 1, 0, 0, 0]; opaque = NO; layer = <CALayer: 0x1655dab0>
尝试将简单视图添加到容器视图中。我在至少两个视图中看到过类似的问题,在这两种情况下,将它们添加到容器视图似乎可以解决问题
编辑
我所说的容器视图,只是简单地将简单视图添加到UIView中,然后将约束和旋转应用到容器。这不是一个真正的解决方案,而是一种解决方法
我发现,在使用CGAffineTransformMakeRotation构建iOS 8和iOS 7时,顶部、底部、左侧和右侧约束的行为有所不同。但是,CenterX和CenterY的行为各不相同。此外,只要将约束添加到与约束Thitem
相同的视图中,高度和宽度约束的行为将相同
因此,如果可以将使用CGAffineTransformMakeRotation的视图的约束更改为仅使用高度、宽度、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]];
@属性(非原子)CG仿射变换
变换的原点是“中心”特性的值,或
层的“锚点”属性(如果已更改)。(使用图层
属性以获取底层核心动画层对象。)的
默认值为CGAffineTransformity
旋转前需要设置视图的定位点
yourView.layer.ancorpoint=CGPointMake(0.5,0.5)
值必须介于0和1之间
可能会更改默认值CGAffineTransformity?我有一个类似的问题,我几乎完全确定这是由于他们在iOS 8中如何使一切面向接口(基本上改变坐标系原点的确定方式),但我还没有完全确定这是不是真的,或者iOS 8中是否存在错误,还是怎样现在我已经修改了我的应用程序的一个小部分,它使用旋转来使用计算的CGRECT(ugh)这个问题有什么解决方案吗?还没有,需要检查最新的iOS8版本。。我会更新。你找到解决方案了吗?我没有…对你的问题投赞成票。还没有,你在iOS 8 GM上检查过吗?
// 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]];