开发者

Need to get frame co-ordinate of image while animation

I am using an app, in that am image is animating from top to bottom of screen using the animation.

code:

- (void)onTimer
{
    // build a view from our flake image
    flakeView = [[UIImageView alloc] initWithImage:flakeImage];
    flakeView.backgroundColor=[UIColor blueColor];
    // use the random() function to randomize up our flake attributes
    int startX =round(random() % 460);  
    printf("\n ===== startX :%d",startX);
    int endX = round(random() % 460);
    printf("\n ===== endX :%d",endX);
    double scale = 1 / round(random() % 100) - 1.0;
    double speed = 1 / round(random() %10开发者_StackOverflow社区0) + 1.0;
    // set the flake start position
    flakeView.frame = CGRectMake(startX, -100.0, 25.0 * scale, 25.0 * scale);
    flakeView.alpha = 1.0;
    // put the flake in our main view
    [mView addSubview:flakeView];
    [UIView beginAnimations:nil context:flakeView];
    [UIView setAnimationDuration:20 * speed];
    // code to get current position of image on view
    CALayer mainLayer = flakeView.layer.presentationLayer;
    CGRect layerFrame = mainLayer.frame;
    BOOL intersects = CGRectIntersectsRect(layerFrame, dragger.frame);
    // end position on screen
    flakeView.frame = CGRectMake(endX, 500.0, 15.0 * scale, 15.0 * scale);
    // set a stop callback so we can cleanup the flake when it reaches the
    // end of its animation
    [UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)];
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];

}

- (id)init
{

    if(self = [super init])
    {
        mView = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,440)];
        mView.backgroundColor = [UIColor whiteColor];
        mainLayer =[CALayer layer];
        // load our flake image we will use the same image over and over
        flakeImage = [UIImage imageNamed:@"apple.png"];
        [mView.layer addSublayer:mainLayer];
        // start a timet that will fire 20 times per second
        [NSTimer scheduledTimerWithTimeInterval:(0.8) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
        self.view=mView;
    }
    return self;
}

I used this to get position of an image that is animating from top to bottom of the screen. but I am getting the connstant values of x and y for the image that is animating.

Can any one help in this. Thank U.


One thing I have noted from above code is that you are adding flakeView each time on mView. Do you want so? Please try with following code.

- (void)onTimer
{

    int startX =round(random() % 460);  
    printf("\n ===== startX :%d",startX);
    int endX = round(random() % 460);
    printf("\n ===== endX :%d",endX);
    double scale = 1 / round(random() % 100) - 1.0;
    double speed = 1 / round(random() %100) + 1.0;
  if(flakeView == nil)
  {
    // build a view from our flake image
    flakeView = [[UIImageView alloc] initWithImage:flakeImage];
    flakeView.backgroundColor=[UIColor blueColor];
    // use the random() function to randomize up our flake attributes

    // set the flake start position
    flakeView.frame = CGRectMake(startX, -100.0, 25.0 * scale, 25.0 * scale);
    flakeView.alpha = 1.0;
    // put the flake in our main view
    [mView addSubview:flakeView];
  }
    [UIView beginAnimations:nil context:flakeView];
    [UIView setAnimationDuration:20 * speed];
    // code to get current position of image on view
    CALayer mainLayer = flakeView.layer.presentationLayer;
    CGRect layerFrame = mainLayer.frame;
    BOOL intersects = CGRectIntersectsRect(layerFrame, dragger.frame);
    // end position on screen
    flakeView.frame = CGRectMake(endX, 500.0, 15.0 * scale, 15.0 * scale);
    // set a stop callback so we can cleanup the flake when it reaches the
    // end of its animation
    [UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)];
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];

    NSLog(@"Co-ordinates of imageview : (%f, %f, %f, %f) %@",flakeView.frame.origin.x,flakeView.frame.origin.y,flakeView.frame.size.width,flakeView.frame.size.height);

}

Thanks,


  1. I'm wondering why you could use the dot-notation to access the presentationLayer. It is a method, not a property of CALayer.
  2. Note: "Use of [UIView beginAnimations:context:] is discouraged in iPhone OS 4.0 and later. You should use the block-based animation methods instead." (Apple Docs). If you don't know what block-based animations are, read: What are block-based animation methods in iPhone OS 4.0?

If it still doesn't work with block-based animations, try to set the layer's delegate to nil or use CABasicAnimation either implicitly or explicitly.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜