iPhone — Использование анимации UIView при касании местоположения

#iphone #uiview #touch #uiviewanimation

#iPhone #пользовательский интерфейс #коснитесь #uiviewanimation

Вопрос:

На данный момент я в тупике, я хочу активировать анимацию UIView при нажатии пальцем, создав UIView вокруг того места, где находится палец. Возможно ли это?

 - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch * touch = [touches anyObject];
    CGPoint pos = [touch locationInView: [UIApplication sharedApplication].keyWindow];
    NSLog(@"Position of touch: %.3f, %.3f", pos.x, pos.y);
    //CGRect touchFrame = CGRectMake(pos.x, pos.y, 100, 100);
    UIView *box = [[UIView alloc] initWithFrame:CGRectMake(pos.x, pos.y, 100, 100)];
    NSLog(@"%f", box.frame.origin.x);
    [self.view addSubview:box];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:110 forView:box cache:NO];
    [UIView commitAnimations];
    [box removeFromSuperview];
    [box release];
}
  

Любые предложения более чем приветствуются.

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

1. Это возможно, но в чем именно ваша проблема?

2. Ой, извините! Здесь я немного устал. Когда это выполняется, к области set box не применяется влияние.

3. это должно быть исправлено путем установки границ представления, а не его рамки, как вы делаете. смотрите мой ответ ниже.

Ответ №1:

Это из-за того, что вы написали следующую строку

 [box removeFromSuperview];
    [box release];
  

Эту строку вы должны вызвать после завершения анимации изображения коробки.

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

    UITouch * touch = [touches anyObject];

    CGPoint pos = [touch locationInView: [UIApplication sharedApplication].keyWindow];

    UIView *box = [[UIView alloc] initWithFrame:CGRectMake(pos.x, pos.y, 100, 100)];

    [self.view addSubview:box];

    [UIView beginAnimations:nil context:nil];

    [UIView setAnimationDuration:1.0];

    [UIView setAnimationTransition:110 forView:box cache:NO];

    [UIView commitAnimations];

[self performSelector:@selector(releaseBoxImge:) withObject:box afterDelay:1.0];

}


-(void)releaseBoxImge:(UIView *)boxImage
{

[boxImage removeFromSuperview];

    [boxImage release];

}
  

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

1. Это не помогло, хотя я понимаю, к чему вы клоните. Разве это не должно быть [[self box] removeFromSuperview]? Поскольку оно создано и размещено в touchesBegan. Если я просто выделю / инициализирую это в файле заголовка, могу ли я просто сделать что-то вроде box.frame = CGRectMake(поз.x, поз.y, 100, 100); ?

2. извините, я забыл передать изображение вашего ящика методу выбора. Отредактированный выше код теперь определенно будет работать.

3. Это не создает анимацию в UIView.

Ответ №2:

Как сказал RRB, сделайте removeFromSuperView после завершения анимации (я не уверен, что его код сделает это). Я думаю, это должно выглядеть так:

 //initializations of everything here ..
[UIView animateWithDuration:1.0                  
 animations:^
 {
   //do animations here
 }
 completion:^(BOOL finished)
 {
    //do clean up here
 }];