使用CGAffineTransform为图像设置动画并在指定点获取CGPoint?

时间:2011-05-12 07:36:15

标签: iphone objective-c ios

我是iPhone的新手,我用CGAffineTransform从上到下动画一个图像,我想在(155,50)位置的图像位置如何通过这些代码或其他来源获得这个位置时执行一些任务?

    CGRect frameRect=CGRectMake(155, 0, 9, 8);
boxView=[[UIImageView alloc] initWithFrame:frameRect];
boxView.image = [UIImage imageNamed:@"Projectile2.png"];
[self.view addSubview:boxView];
[boxView release];

CGPoint location = CGPointMake(159.5, 500);

[UIImageView beginAnimations:nil context:nil];
[UIImageView setAnimationDelegate:self];
[UIImageView setAnimationDuration:1.5f];
[UIImageView setAnimationCurve:UIViewAnimationCurveEaseInOut];

CGAffineTransform scaleTrans = CGAffineTransformMakeScale(scaleFactor, scaleFactor);
CGAffineTransform rotateTrans = CGAffineTransformMakeRotation(angle * M_PI / 180);

boxView.transform = CGAffineTransformConcat(scaleTrans, rotateTrans);
angle = (angle == 180 ? 360 : 180);
boxView.center = location;
[UIImageView commitAnimations];

提前致谢...

1 个答案:

答案 0 :(得分:1)

AFAIK没有在动画期间调用的回调,只是在动画的开头或结尾(这对于基于块的动画和旧的非块方法都是如此)

您可以这样做:

1-为要跟踪的视图的“center”属性注册KVO观察者

[viewToTrack addObserver:anObserver 
              forKeyPath:@"center" 
                 options:NSKeyValueObservingOptionNew  
                 context:somePointerToYourContextOrNIL];

2-每次中心属性发生变化时都会调用回调。 anObserver必须实现这个方法

- (void)observeValueForKeyPath:(NSString *)keyPath 
                      ofObject:(id)object 
                        change:(NSDictionary *)change 
                       context:(void *)context

keyPath将包含您要跟踪的属性的名称,object是viewToTrack

更改将包含新值(基于前面的示例),上下文为

somePointerToYourContextOrNIL(可以是零)

3-您将收到的回调(根据您的注册方式)属性的旧值和/或新值

当你足够接近你需要做的事情时,请检查4-

以下是KVO

的入门读物