Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS8下的CGAffineTransformMakeRotation和Autolayout问题_Ios_Objective C_Ios8 - Fatal编程技术网

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]];