Анимация UILabel исчезает
-
27-09-2019 - |
Вопрос
Я собираюсь в конечном итоге с массивом RSS-каналов, и хотелось бы метку или некоторые, чтобы отобразить их в нижней части вида. Я хотел бы анимировать через каждый канал в массиве.
Это то, что я имею так далеко, чтобы анимировать, который работает для исчезновения, но только оживляет последний элемент массива.
feed = [[UILabel alloc] initWithFrame:CGRectMake(0,380,320,43)];
[self.view addSubview:feed];
feed.alpha=1;
NSArray *feeds = [NSArray arrayWithObjects:[NSString stringWithFormat:@"1234567"],[NSString stringWithFormat:@"qwerty"],[NSString stringWithFormat:@"asdfgh"],nil];
for (NSString* f in feeds){
feed.text=f;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:2.0f];
feed.alpha=0;
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];
}
Я уверен, что это просто.
Спасибо
Решение
Во-первых, вы должны действительно рассмотреть лучшую конвенцию именования. Называя UILabel A подача Не очень полезен для будущего, когда вы должны вернуться и посмотреть на ваш код. Я бы назвал это FeedLabel. Отказ Затем, когда вы повторяете свой список каналов, вы можете просто for (NSString *feed in feeds)
И это будет иметь больше смысла. И так волю feedLabel.text = feed;
.
Во всяком случае, проблема, которую я вижу с вашим кодом, состоит в том, что ваши неоднократно устанавливают альфа на ноль в вашем цикле, но вы никогда не устанавливаете его обратно на один. Другими словами, вы не делаете изменения в альфа-значение. Остается одинаково в каждой итерации.
Так что, возможно, вы могли бы уточнить, что вы пытаетесь сделать. Если вы хотите исчезнуть текст между изменениями в тексте, вам понадобится другая анимация и методология. Вместо цикла цепи ваша анимация такова, что когда ваш DiDStopselector вы устанавливаете текст и начните следующий. Что-то типа:
- (void)performAnimation;
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:2.0f];
feed.alpha=0;
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];
[UIView commitAnimations];
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
feed.alpha = 1.0;
NSString *nextFeed = [self getNextFeed]; // Need to implement getNextFeed
if (nextFeed)
{
// Only continue if there is a next feed.
[feed setText:nextFeed];
[self performAnimation];
}
}
Другие советы
Я попробовал ваш код, он исчезает на первом корме, но он не входит в событие AnimationDidStop. Вот почему он снова не может вызывать оперативность. Есть ли набор для анимации (делегат или протокол и т. Д.)