框架与中心矛盾

时间:2013-06-05 21:00:02

标签: ios frame center

这怎么可能?不应该有以下情况吗?

v.center == CGPointMake(v.frame.origin.x + v.frame.size.x/2), v.frame.origin.y + v.frame.size.y)/2)

如果是这样,那么你如何解释我得到的这个结果?这是代码:

                 NSLog(@"sv    center: %@",NSStringFromCGPoint(sv.center));
                 NSLog(@"piece center: %@",NSStringFromCGPoint(piece.center));
                 NSLog(@"sv     frame: %@",NSStringFromCGRect(sv.frame));
                 NSLog(@"piece  frame: %@",NSStringFromCGRect(piece.frame));

我省略的NSLog语句之间没有代码。我注意到,当我在此之后断开时,po sv.superview和po piece.superview都返回相同的对象。无论如何,这些陈述的结果是:

... sv    center: {228.934, 120.684}
... piece center: {124.28, 51.1536}
... sv     frame: {{2.52823, -9.70338}, {122.04, 122.04}}
... piece  frame: {{63.2595, -9.86644}, {122.04, 122.04}}

按照列出的帧进行数学运算,我希望中心分别为{62.284115, 56.16831}{92.64975, 56.08678}。如果我不能像刚刚描述的那样从框架中导出中心,我还能错过什么呢?

以下是po sv.superview的结果:

3 = 0x1f8d0290 <Palette: 0x1f8d0290; frame = (2.017e-05 1.64772e-06; 1024 748); transform = [2.39836, 0, 0, 2.39836, 0, 0]; tag = 42; layer = <CALayer: 0x1f8b9b60>>

以下是po piece.superview的结果:

$2 = 0x1f8d0290 <Palette: 0x1f8d0290; frame = (2.017e-05 1.64772e-06; 1024 748); transform = [2.39836, 0, 0, 2.39836, 0, 0]; tag = 42; layer = <CALayer: 0x1f8b9b60>>

piece和sv都属于同一个类,它是UIImageView的子类。

1 个答案:

答案 0 :(得分:2)

您的问题可能是您的transform属性不是标识转换。在这种情况下,frame属性未定义,请参阅docs
“警告:如果transform属性不是identity变换,则此属性的值未定义,因此应该被忽略。”