0

У меня есть контроллер вида, который имеет вид прокрутки, который отказывается горизонтально, и в этом прокрутке у меня есть метка.Как анимировать удаление метки?

Теперь я могу держать ярлык и прокручивать его вниз, и если я отпущу его, он вернется назад.

Я хочу, чтобы: Когда я прокручиваю координату вида y (используя myScrollView.contentOffset.y) на какое-то значение, скажем -33 и под я могу освободить свой штраф, а ярлык будет анимироваться в нижней части экрана и исчезнуть, и теперь я могу установить ярлык как новое значение, и он будет анимироваться сверху до исходного места метки.

Вот фото того, как контроллер представления выглядит следующим образом:

enter image description here

И это соответствующий метод, который я уже реализован (питание от @ rebello95):

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    if (self.myScrollView.contentOffset.y <= -73) { 

     [UIView animateWithDuration:0.3 animations:^{ 
      self.homeLabel.alpha = 0.0; 
     } completion:^(BOOL finished) { 
      [self.homeLabel removeFromSuperview]; 
      self.homeLabel = nil; 
     }]; 
    } 

    NSLog(@"%f", self.myScrollView.contentOffset.y); 
} 

Теперь я хочу он скользит в нижней части страницы и исчезает.

спасибо!

+2

Какую анимацию вы пробовали? Что он сделал неправильно? – Wain

+0

Я этого не сделал, поэтому я спросил, как это сделать (не грубым тоном :)) –

ответ

1

EDIT: Теперь анимация перемещает метку в нижней части контроллера вида, а затем исчезает.

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

Пример:

[UIView animateWithDuration:0.3 animations:^{ 
    [self.myLabel setFrame:CGRectMake(self.myLabel.frame.origin.x, self.view.frame.size.height - self.myLabel.frame.size.height, self.myLabel.frame.size.width, self.myLabel.frame.size.height)]; 
    self.labelRemoving = YES; 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:0.3 animations:^{ 
     self.myLabel.alpha = 0.0; 
    } completion:^(BOOL finished) { 
     [self.myLabel removeFromSuperview]; 
     self.myLabel = nil; 
     self.labelRemoving = NO; 
    }]; 
}]; 

Sidenote: Вы, вероятно, следует использовать <= вместо == в вашем if statement для достижения желаемых результатов. Кроме того, вы можете установить флаг, указывающий, что ваша метка удаляется (так как этот метод неизбежно будет вызываться несколько раз). Что-то вроде этого:

//.h 
@property (nonatomic, assign) BOOL labelRemoving; 

//.m 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    if (self.myScrollView.contentOffset.y <= -33 && !self.labelRemoving) { 

     [UIView animateWithDuration:0.3 animations:^{ 
      [self.myLabel setFrame:CGRectMake(self.myLabel.frame.origin.x, self.view.frame.size.height - self.myLabel.frame.size.height, self.myLabel.frame.size.width, self.myLabel.frame.size.height)]; 
      self.labelRemoving = YES; 
     } completion:^(BOOL finished) { 
      [UIView animateWithDuration:0.3 animations:^{ 
       self.myLabel.alpha = 0.0; 
      } completion:^(BOOL finished) { 
       [self.myLabel removeFromSuperview]; 
       self.myLabel = nil; 
       self.labelRemoving = NO; 
      }]; 
     }]; 
    } 

    NSLog(@"%f", self.myScrollView.contentOffset.y); 
} 
+0

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

+0

Я обновил метод в своем вопросе с предложением вашего кода –

+0

@nickshmick см. Мое редактирование. Он вытесняет ярлык, перемещая его в нижней части окна. Вы должны быть в состоянии выяснить, что вам нужно от этого. Пожалуйста, примите мой ответ, если он помог – rebello95

Смежные вопросы