#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’