2013-06-05 84 views
0

这怎么可能?以下情况不应该如此吗?框架与中心矛盾

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

两个片和SV是相同的类,它是UIImageView的子类。

回答

2

你问题可能是你的transform属性不是身份转换。在这种情况下,frame属性根本未定义,请参阅docs
“警告:如果transform属性不是标识转换,则此属性的值未定义,因此应予以忽略。

+0

有趣。我从来没有注意到那个警告。确实如此。变换不是身份。超级视图被缩放。但我认为总是有一个框架。相同的代码在类似缩放的其他视图上正常工作,所以我无法弄清楚这里有什么不同。考虑到这一点,我将不得不仔细检查我的整个应用程序。整个应用程序涉及翻译和缩放视图。 –

+0

我会运行一些测试,并将其标记为答案,如果测试证实它(我没有理由在这一点上怀疑它)。 –

+0

哎呀!当我第一次回复你的帖子的时候,我应该抓住这个。 sv和piece的转换就是身份。他们的超级观点的转变并非身份。所以我的困境仍然存在。 –