Prakash Jat
Prakash Jat

Reputation: 589

Animate an Image with CGAffineTransform and get CGPoint at specified point?

I am new in iPhone and I animate an Image with CGAffineTransform from top to bottom and i want to perform some task when Image at (155,50) position how to get this position by these code or other source ?

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

Thanks in Advance...

Upvotes: 0

Views: 725

Answers (1)

Giuliano Galea
Giuliano Galea

Reputation: 982

AFAIK there are no callbacks that will be called during the animation, just at the beginning or the end of the animation (this seems true both for block based animations and the old non block methods)

You can do something like this:

1- register a KVO observer for the "center" property of the view you want to track

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

2- the callback will be called everytime the center property is changing. anObserver MUST implement this method

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

keyPath will contain the name of the property you are tracking, object is the viewToTrack

change will contain the new value (based on the previous example) and context is

somePointerToYourContextOrNIL (it can be nil)

3- in the callback you will receive (based on how you register it) the old and/or the new value for the property

4- check when you are near enough to the point where you should do wgìhat you need to do

Here is a primer on KVO

Upvotes: 1

Related Questions