Как постепенно уменьшить непрозрачность UIButton?

В моем проекте у меня есть UIButton, который при нажатии масштабируется. До сих пор все в порядке, но мне нужно, чтобы непрозрачность кнопки постепенно уменьшалась с 1 до 0. Я имею в виду, что она должна уменьшаться в последовательности 1,0,9,0,8,0,7,0,6,0,5,0,4,0,3,0,2,0,1,0,0. Мой текущий код

    -(void)roundButtonAnimation
{
    self.buttonZoom = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
    self.buttonZoom.duration = 0.8f;
    self.buttonZoom.values = @[[NSValue valueWithCATransform3D:CATransform3DMakeScale(1, 1, 1)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(2,2,2)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(3,3,3)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(5,5,5)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(6,6,6)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(7,7,7)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(9,9,9)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(10,10,10)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(11,11,11)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(12,12,12)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(13,13,13)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(14,14,14)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(15,15,15)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(16,16,16)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(17,17,17)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(18,18,18)],[NSValue valueWithCATransform3D:CATransform3DMakeScale(50,50,50)]];
    self.buttonZoom.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
    self.roundButton.transform = CGAffineTransformMakeScale(0,0);
    self.roundButton.alpha = 0.3;
    [self.roundButton.layer addAnimation:self.buttonZoom forKey:@"buttonScale"];

[self.CLSpinnerView1 stopAnimating];
    //[self performSelector:@selector(secondView) withObject:self afterDelay:0.3];

    [self performSelector:@selector(postNotification) withObject:self afterDelay:0.6];
}

person Fionashoff    schedule 24.06.2015    source источник
comment
Что производит этот код? В чем дело?   -  person Ilario    schedule 24.06.2015
comment
Есть ли какая-то конкретная причина, по которой вы не используете простое преобразование и альфа-анимацию с использованием линейной кривой?   -  person Andrea    schedule 24.06.2015
comment
@Andrea простое преобразование и линейная кривая альфа-анимации ... Можно ли увеличить масштаб с помощью этого кода ??   -  person Fionashoff    schedule 24.06.2015
comment
@Ilario Этот код увеличивает кнопку   -  person Fionashoff    schedule 24.06.2015
comment
Попробуйте две CAAnimations, одну для масштабирования, а другую для альфы (непрозрачности), затем добавьте их в CAAnimationGroup и назначьте эту группу своей кнопке/методу.   -  person Mrunal    schedule 24.06.2015


Ответы (3)


[UIView animateWithDuration:1.0
                          delay:0.0
                        options: UIViewAnimationCurveLinear
                     animations:^{
                         self.roundButton.transform = CGAffineTransformMakeScale(50.0f, 50.0f);
                         self.roundButton.alpha = 0.0;
                     } 
                     completion:^(BOOL finished){
                         NSLog(@"Done!");
                     }];
}

Давайте немного объясним, в этом блоке анимации вы говорите, что анимация должна происходить за одну секунду, в течение этой секунды на основе линейной кривой (таким образом, всегда одинаковое увеличение/уменьшение) кнопка должна увеличиваться в 50 раз, а альфа должна быть анимирована до 0
Я не понимаю, почему вы используете более сложный CAKeyframeAnimation вместо этого простого блока анимации.
Анимация по ключевым кадрам полезна, когда вам нужно больше возможностей для таймингов и анимация по набору значений.

person Andrea    schedule 24.06.2015

UIView animateWithDuration:animations: должно служить вашей цели здесь.

[UIView animateWithDuration:1.0 animations:^{
    button.alpha = 0.0;
}];

Постепенно изменит альфа-канал кнопки на 0 в течение одной секунды (...WithDuration:1.0...).

См. Справочник по классам UIView для получения дополнительной информации.

Надеюсь это поможет.

person ricky3350    schedule 24.06.2015

Попробуй это

[button.layer removeAnimationForKey:@"opacity"];
person Pradumna Patil    schedule 24.06.2015