Есть ли способ анимировать представление так, чтобы оно увеличивалось, а вид немного слишком далеко, а резиновые ленты - до конечного размера? Я не уверен, как сделать такую анимацию.
Анимировать просмотр с масштабированием?
Ответ 1
напишите этот код, когда вы хотите запустить эту анимацию
popUp.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.001, 0.001);
[self.view addSubview:popUp];
[UIView animateWithDuration:0.3/1.5 animations:^{
popUp.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3/2 animations:^{
popUp.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3/2 animations:^{
popUp.transform = CGAffineTransformIdentity;
}];
}];
}];
SWIFT 5.0
selectView.transform =
CGAffineTransform.identity.scaledBy(x: 0.001, y: 0.001)
view.addSubview(selectView)
UIView.animate(withDuration: 0.3 / 1.5, animations: {
selectView.transform =
CGAffineTransform.identity.scaledBy(x: 1.1, y: 1.1)
}) { finished in
UIView.animate(withDuration: 0.3 / 2, animations: {
selectView.transform = .identity.scaledBy(x: 0.9, y: 0.9)
}) { finished in
UIView.animate(withDuration: 0.3 / 2, animations: {
selectView.transform = CGAffineTransform.identity
})
}
}
Это обновленный код (из fabio.cionini), поскольку принят ответ, поэтому обновление до последней версии.
Ответ 2
Просто переработал код Амита Сингха, используя блоки, что делает его намного проще и удобочитаемым.
popUp.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.001, 0.001);
[self.view addSubview:popUp];
[UIView animateWithDuration:0.3/1.5 animations:^{
popUp.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3/2 animations:^{
popUp.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3/2 animations:^{
popUp.transform = CGAffineTransformIdentity;
}];
}];
}];
Ответ 3
Слишком много сложных ответов. Это намного проще сделать с 2017 года (Swift 3/4).
Swift 4 -
yourview.transform = yourview.transform.scaledBy(x: 0.001, y: 0.001)
UIView.animate(withDuration: 0.5, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.3, options: .curveEaseInOut, animations: {
yourview.transform = CGAffineTransform.identity.scaledBy(x: 1.0, y: 1.0)
}, completion: nil)
Обратите внимание на параметр usingSpringWithDamping
. Этот параметр определяет, какой эффект отскока/пружины вам нужен, и допускает значения от 0 до 1. Чем ниже значение, тем больше эффект отскока. Также, если вам не нравится эффект scaleBy
вы можете просто использовать старые добрые кадры, чтобы показать расширяющийся и подпрыгивающий UIView
.
Ответ 4
В наши дни это можно сделать гораздо проще:
view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.001, 0.001);
[UIView animateWithDuration:0.5 delay:0.2 usingSpringWithDamping:0.6f initialSpringVelocity:1.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);
} completion:^(BOOL finished) {
view.transform = CGAffineTransformIdentity;
}];
Ответ 5
Ответ Амита приятный и принятый. Я отправляю Swift версию этого ответа для того, кто хочет развиваться в Swift/future. Я использовал Xcode 7.3.1 и Swift 2.2 для разработки этого.
popView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.001, 0.001)
self.view.addSubview(popView)
UIView.animateWithDuration(0.3/1.0, animations: {
popView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1)
}, completion: {finished in
UIView.animateWithDuration(0.3/1.2, animations: {
popView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9);
}, completion: {finished in
UIView.animateWithDuration(0.3/1.5, animations: {
popView.transform = CGAffineTransformIdentity
})
})
})
Спасибо, пожалуйста, сделайте комментарий для обновления.
UPDATE Вот тот же код для Swift 3. Хорошо работает с Xcode 8 и iOS 10.
let identityAnimation = CGAffineTransform.identity
let scaleOfIdentity = identityAnimation.scaledBy(x: 0.001, y: 0.001)
popView.transform = scaleOfIdentity
self.view.addSubview(popView)
UIView.animate(withDuration: 0.3/1.5, animations: {
let scaleOfIdentity = identityAnimation.scaledBy(x: 1.1, y: 1.1)
popView.transform = scaleOfIdentity
}, completion: {finished in
UIView.animate(withDuration: 0.3/2, animations: {
let scaleOfIdentity = identityAnimation.scaledBy(x: 0.9, y: 0.9)
popView.transform = scaleOfIdentity
}, completion: {finished in
UIView.animate(withDuration: 0.3/2, animations: {
popView.transform = identityAnimation
})
})
})
Надеюсь, что это помогло.
Ответ 6
Просто для повторного использования кода и сохранения кода.
@interface UIView (Animation)
- (void)addSubviewWithBounce:(UIView*)theView;
@implementation UIView (Animation)
-(void)addSubviewWithBounce:(UIView*)theView
{
theView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.001, 0.001);
[self addSubview:theView];
[UIView animateWithDuration:0.3/1.5 animations:^{
theView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3/2 animations:^{
theView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3/2 animations:^{
theView.transform = CGAffineTransformIdentity;
}];
}];
}];
}
@end
Ответ 7
Используйте следующий код для анимации увеличения изображения.
#define DURATION 1.0
CAKeyframeAnimation *animation = [CAKeyframeAnimation
animationWithKeyPath:@"transform"];
CATransform3D scale1 = CATransform3DMakeScale(0.5, 0.5, 1);
CATransform3D scale2 = CATransform3DMakeScale(1.2, 1.2, 1);
CATransform3D scale3 = CATransform3DMakeScale(0.9, 0.9, 1);
CATransform3D scale4 = CATransform3DMakeScale(1.0, 1.0, 1);
NSArray *frameValues = [NSArray arrayWithObjects:
[NSValue valueWithCATransform3D:scale1],
[NSValue valueWithCATransform3D:scale2],
[NSValue valueWithCATransform3D:scale3],
[NSValue valueWithCATransform3D:scale4],
nil];
[animation setValues:frameValues];
NSArray *frameTimes = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.5],
[NSNumber numberWithFloat:0.9],
[NSNumber numberWithFloat:1.0],
nil];
[animation setKeyTimes:frameTimes];
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
animation.duration = DURATION;
[animationView.layer addAnimation:animation forKey:@"popup"];
Ответ 8
Используется с iOS9 и xCode 7
//for zoom in
[UIView animateWithDuration:0.5f animations:^{
self.sendButton.transform = CGAffineTransformMakeScale(1.5, 1.5);
} completion:^(BOOL finished){}];
// for zoom out
[UIView animateWithDuration:0.5f animations:^{
self.sendButton.transform = CGAffineTransformMakeScale(1, 1);
}completion:^(BOOL finished){}];
Ответ 9
Проверьте раздел, связанный с анимацией, в Справочнике классов UIView в вашем Xcode. Подсказка: используйте свойство transform.
Ответ 10
Это статья о том, как использовать различные различные методы подпрыгивания, должна быть там.
http://watchingapple.com/2008/04/core-animation-creating-a-jack-in-the-box-with-cakeyframeanimation/