UIImageView XY与图层移动协调

时间:2011-08-30 22:11:15

标签: iphone objective-c coordinates layer

我在屏幕上移动UIImageView图层。在某些时候,我正试图使用​​imageView.frame.origin.x检索移动的imageView的x和y坐标。我在移动后接收原始坐标而不是新坐标。如何正确获得X和Y?


这是我的代码:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:rect];  
imageView.animationImages = [NSArray arrayWithArray:imgNameArr];    
imageView.animationDuration = 2;
    imageView.animationRepeatCount = 0;
    [imageView startAnimating];
    [self.view addSubview:imageView];   
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.duration = speed;
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO; 
CGMutablePathRef pointPath = CGPathCreateMutable();
CGPathMoveToPoint(pointPath, NULL, rect.origin.x, rect.origin.y);
    CGPathAddLineToPoint(pointPath, NULL, x, y);
pathAnimation.path = pointPath;
CGPathRelease(pointPath);   
[imageView.layer addAnimation:pathAnimation forKey:[NSString stringWithFormat:@"pathAnimation%@",objId]];
[imageView release];

1 个答案:

答案 0 :(得分:0)

根据frame属性的UIView documentation

  

警告:如果transform属性不是identity变换,那么   此属性的值未定义,因此应忽略。

如果您调整该视图的图层的frametransform属性(实际上是UIView在设置其变换时所做的更改),affineTransform属性也会变为未定义。在Cocoa Touch中,合成器在合成时应用变换。目前,在应用变换时你似乎得到的是原始帧,好像没有变换,但正如文档所说,它是未定义的,所以不要依赖它。

如果您只是在没有其他转换的情况下移动视图,我建议您使用视图的center属性而不是应用转换。这将正确更新您的框架。根据经验证据,UIKit似乎足够聪明,与应用转换相比,仅仅调整中心没有任何性能下降。