Прикрепление изображения к другому изображению

#ios #objective-c

#iOS #objective-c

Вопрос:

В настоящее время у меня есть некоторый код, который создает UIImageView в случайном месте, которое анимируется в нижней части экрана. Когда этот объект сталкивается с другим объектом, которым управляет пользователь, обнаруживается столкновение. Однако я не знаю, как затем сделать так, чтобы случайное изображение оставалось поверх изображения, управляемого пользователем, после столкновения, чтобы случайное изображение перемещалось вместе с пользовательским. Это код, который у меня есть до сих пор:

 -(void)spawnMechanism{
    timeSinceLastSpawn  ;


    if(timeSinceLastSpawn >= 3)
    {
        if( arc4random() % 10 < 7 ){


            UIImageView *spawnGood;

            spawnGood=[[UIImageView alloc]initWithFrame:CGRectMake(arc4random() % 700, -100, 70,70)];
            UIImage *image;
            image=[UIImage imageNamed:@"friendly-01"];
            [spawnGood setImage:image];
            [self.view addSubview:spawnGood];

            NSLog(@"spawnGood spawned");
            [UIView animateWithDuration:2.0
                                  delay: 0.0
                                options: UIViewAnimationOptionCurveLinear
                             animations:^{
                                 CGRect frame1 =[spawnGood frame];

                                 frame1.origin.y =frame1.origin.y 950;
                                 [spawnGood setFrame:frame1];

                             }
                             completion:^(BOOL finished){

                                 if(CGRectIntersectsRect(userToken.frame, spawnGood.frame)){
                                     NSLog(@"Good Collision");

                                 }else{
                                     [UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
                                         CGRect frame1 =[spawnGood frame];

                                         frame1.origin.y =frame1.origin.y 950;
                                         [spawnGood setFrame:frame1];
                                     }
                                                      completion:nil];

                                     };
                             }

             ];}









            }





        }
  

Для управления пользовательским изображением у меня есть этот код:

 - (IBAction)right {
    /*[UIView animateWithDuration:0.10f
                     animations:^{
                         _userToken.frame = CGRectMake(_userToken.frame.origin.x   80, _userToken.frame.origin.y, _userToken.frame.size.width, _userToken.frame.size.height);
                     }];
}*/
    if(goRight==nil){
    goRight=[NSTimer scheduledTimerWithTimeInterval:rate
                                            target:self
                                          selector:@selector(goRight)
                                          userInfo:nil
                                           repeats:YES];
    }

        [self myDetectCollisionsOnRight];
}

- (IBAction)left{
    /*[UIView animateWithDuration:0.10f
                     animations:^{
                         _userToken.frame = CGRectMake(_userToken.frame.origin.x - 80, _userToken.frame.origin.y, _userToken.frame.size.width, _userToken.frame.size.height);
                     }];
}*/
    if(goLeft==nil){
        goLeft=[NSTimer scheduledTimerWithTimeInterval:rate
                                           target:self
                                         selector:@selector(goLeft)
                                         userInfo:nil
                                          repeats:YES];
    }
        [self myDetectCollisions];
}

-(IBAction)stopLeft{
    [goLeft invalidate];
    goLeft=nil;
}


-(IBAction)stopRight{
    [goRight invalidate];
    goRight=nil;
}

-(void)goLeft{
    userToken.center =CGPointMake(userToken.center.x -25, userToken.center.y);
    [self myDetectCollisions];


}

-(void)goRight{
    userToken.center =CGPointMake(userToken.center.x  25, userToken.center.y);
    [self myDetectCollisionsOnRight];

}
  

Кто-нибудь может предложить решение этой проблемы?

Комментарии:

1. Что в настоящее время идет не так? Вы пытались изменить положение центра изображения?

2. Приведенный выше код работает, но проблема заключается в том, что spawnGood привязывается к UserToken

Ответ №1:

Попробуйте использовать -addSubview: . Я думаю, что если оно будет добавлено userToken , а затем userToken перемещено, spawnGood оно будет перемещаться вместе с ним, потому что это подпредставление.

 if(CGRectIntersectsRect(userToken.frame, spawnGood.frame)){
     NSLog(@"Good Collision");
     [spawnGood removeFromSuperView]
     [userToken addSubview: spawnGood];
     //Position the subview where the collision took place here
}
  

Комментарии:

1. Я пробовал, но из-за этого spawnGood исчезает, когда он сталкивается с UserToken…

2. Попробуйте добавить вызов для -removeFromSuperView последующего вызова -addSubview .

3. Я получаю сообщение об ошибке в строке [spawnGood removeFromSuperview] — «Нет видимого @interface для ‘UIImageView’ объявляет селектор ‘removeFromSuperview’