如何在CALayer上添加UIImageView?

时间:2012-09-16 05:44:51

标签: objective-c animation uiimageview calayer uitouch

需要帮助。多年来我一直坚持这个问题...... 我正在做一个触杀式鸟类射击游戏。 当这只鸟被触摸时,它就会死去,其中有一系列的图像可以激活它的血液。 这只鸟是静止的,有时候苍蝇...... 我可以使用以下代码轻松完成静态部分:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
   if ([touches count]==1)
   {    
    location = [mytouch locationInView:self];
    UIView *killView = [self hitTest:location withEvent:nil];

    if ([killView isKindOfClass:[UIImageView class]]) {
        birdKilled = YES;
        [self addSubview:[self bloodSplash:killView]];}}}



-(UIImageView *)bloodSplash:(UIView*)killedView {
    UIImageView *blood = [[UIImageView alloc] 
          initWithFrame:CGRectMake(killedView.center.x-100.0/2.0,    killedView.center.y-100.0/2.0, 100, 100)];
    [killedView setHidden:YES];
    blood.image = [bloodExplodes objectAtIndex:2];
    [blood setAnimationImages:bloodExplodes];
    [blood setAnimationDuration:0.4];
    [blood setAnimationRepeatCount:1];
    [blood startAnimating];            
    [self performSelector:@selector(cleanBlood:) withObject:blood afterDelay:.8];
    return [blood autorelease];}

但对于飞行部分,我真的被困住了! 自从我了解到飞翔鸟的动画效果。 我需要在hitTest中检测它的表示层。 我可以通过“UIViewAnimationOptionAllowUserInteraction”成功完成..但问题是我无法弄清楚如何将bloodSplash函数添加到触摸点,因为它将UIImageView返回给CALayer。 这是我的试用......

-(void)touchesBegan:(NSSet *)touches withEvent: (UIEvent *)event{

    if ([flyingBird.layer.presentationLayer hitTest:location]) {
     CALayer* touchedLayer = 
       [flyingBird.layer.presentationLayer hitTest:location];
    //No Idea what to do next..
  }}

因为我真的不太喜欢层......如果有任何建议。

1 个答案:

答案 0 :(得分:0)

要将图像视图添加到飞鸟视图,您需要找到正确的视图。 UIView由CALayer支持,该层将UIView作为其委托。 动画时,您需要在表示层上点击测试,然后返回到模型图层,因为那是与您相关的图层。从那里你可以通过查询图层的委托来找到相应的UIView。 所以这看起来像这样:

CALayer *hitLayer = [[flyingBird.layer.presentationLayer hitTest:location] modelLayer];
UIView *hitView = [hitLayer delegate];

这应该是您可以添加动画UIImageView的视图。