我在屏幕上移动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];
答案 0 :(得分:0)
根据frame
属性的UIView documentation:
警告:如果transform属性不是identity变换,那么 此属性的值未定义,因此应忽略。
如果您调整该视图的图层的frame
或transform
属性(实际上是UIView在设置其变换时所做的更改),affineTransform
属性也会变为未定义。在Cocoa Touch中,合成器在合成时应用变换。目前,在应用变换时你似乎得到的是原始帧,好像没有变换,但正如文档所说,它是未定义的,所以不要依赖它。
如果您只是在没有其他转换的情况下移动视图,我建议您使用视图的center
属性而不是应用转换。这将正确更新您的框架。根据经验证据,UIKit似乎足够聪明,与应用转换相比,仅仅调整中心没有任何性能下降。