Я хочу создать представление, такое как QuickActionBar на Android, которое при нажатии на кнопку в левом верхнем углу открывается просто, но оно выглядит так, как будто они идут справа, нажимают на левой стены, и отскочил назад, а затем остановился. вид появляется, но я не могу анимировать подсмотры ..Анимированные подпрограммы слева-справа-слева
0
A
ответ
0
CAKeyframeAnimation выглядит правильно для вашей проблемы. Я написал эту функцию анимации раньше для ярлыка, сдвигающегося по экрану. Я немного обновил xValues для ваших целей, но, скорее всего, вам придется поиграть с ними. Также после удара стены вы можете играть со значением scale.y, вы можете легко интегрировать это в анимацию ключевого кадра.
+ (void) slideAcrossScreen:(UIView *) view Duration:(CGFloat) duration FromLeft:(BOOL) fromLeft
{
//This is to make it work with both left-right-left and right-left-right anims.
CGFloat slideLength = fromLeft ? -view.frame.origin.x : [[UIScreen mainScreen] bounds].size.width - (view.frame.origin.x + view.frame.size.width);
CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform.translation.x"];
NSArray *xValues =
@[[NSNumber numberWithFloat:view.bounds.origin.x],
[NSNumber numberWithFloat:view.bounds.origin.x + 10 * slideLength/10],
[NSNumber numberWithFloat:view.bounds.origin.x + 10 * slideLength/10],
[NSNumber numberWithFloat:view.bounds.origin.x + 9 * slideLength/10]];
[anim setValues:xValues];
NSArray *timeFrames =
@[[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.85],
[NSNumber numberWithFloat:0.9],
[NSNumber numberWithFloat:1.0]];
[anim setKeyTimes:timeFrames];
[anim setDuration:duration];
[anim setFillMode:kCAFillModeForwards];
[anim setRemovedOnCompletion:FALSE];
[view.layer addAnimation:anim forKey:@"slide"];
}
0
Я просто потрачу 15 минут, чтобы решить вашу проблему, поскольку анимационный вид всегда интересен. Итак, вот фрагмент, вы передаете его view
, и он будет оживлять его. Конечно, вы можете добавить еще немного, если хотите.
+ (void) animateView : (UIView *) view{
__block CGRect frame = view.frame;
frame.origin.x = - 320;
[view setFrame:frame];
[UIView animateWithDuration:1.5f animations:^{
frame.origin.x = 10.0f;
frame.size.width = 310.0f;
[view setFrame:frame];
} completion:^(BOOL finished) {
if (finished) {
[UIView animateWithDuration:0.5 animations:^{
frame.origin.x = 0.0f;
frame.size.width = 320.0f;
[view setFrame:frame];
} completion:^(BOOL finished) {
}];
}
}];
}
Cheers.
Смежные вопросы
- 1. Обработка исключения подпрограммы подпрограммы
- 2. Основные анимированные страницы, анимированные всегда справа
- 3. Анимированные UIButtons
- 4. Perl - аргумент подпрограммы - другой вызов подпрограммы
- 5. Подпрограммы UIPickerView
- 6. анимированные эффект нескольких изображений
- 7. Анимированные отзывчивые Svg-Map
- 8. WPF - Анимированные управления пользователя
- 9. Анимированные Маски в C4
- 10. Анимированные gifs в QMovie
- 11. Анимированные сюжеты MATLAB
- 12. Анимированные спрайты в Cocos2d
- 13. Анимированные элементы массива
- 14. CSS рефакторинг анимированные divs
- 15. Вспышка: Говорящие анимированные персонажи
- 16. Анимированные кнопки HTML
- 17. Анимированные gd-фреймы
- 18. Анимированные спрайты в Python
- 19. UITabBar - setItems: анимированные: сбои
- 20. Анимированные слова с jQuery
- 21. Анимированные макеты Android
- 22. анимированные спрайты без spritesheet
- 23. Анимированные дочерние элементы div
- 24. OPENGL C++ анимированные частицы
- 25. Анимированные данные JSON?
- 26. Анимированные цвета в paper.js
- 27. случайный просмотр изображений (анимированные)
- 28. анимированные изображения на WordPress
- 29. Линии рисования Ios анимированные
- 30. Android анимированные вложенные фрагменты
Почему 'timesFrames' не содержит значений между 0.0 и 0.85 ?? – Subbu
вы можете редактировать их, как вам нравится 0.85 - время, когда оно попадает в стену. Времена привязаны к xValues, определенным выше, поэтому в момент времени 0.0 он будет в начальной позиции, тогда до 0.85 он будет скользить с фиксированной скоростью, пока не попадет в стену. – guenis