Вопрос по ios, iphone – Как сделать так, чтобы вид отображался в анимации при нажатии кнопки?

3

Я новичок в кодировании. Я делаю приложение, в котором мне нужно, чтобы при нажатии кнопки отображался вид, а вид должен выглядеть так, как если бы он исходил от самой кнопки. И при повторном нажатии на кнопку вид должен вернуться к кнопке (анимированной).

У меня есть анимации, такие как flip, curl, но я не знаю, как это сделать.

Ваш Ответ

2   ответа
-2

// Здесь animationButton - название кнопки // Здесь aView - это вид

aView.view.center = animationButton.center;

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

CGAffineTransform trans = CGAffineTransformScale(aView.view.transform, 0.01, 0.01);

aView.view.transform = trans;   // do it instantly, no animation

[self.view addSubview:aView.view];

// now return the view to normal dimension, animating this transformation

// Теперь с помощью анимации масштабируем представление до некоторой степени с помощью анимации

[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationCurveEaseInOut
                 animations:^{
                                  aView.view.transform =   CGAffineTransformScale(aView.view.transform, 70.0, 70.0);
                 }
                 completion:nil];
6

Вот простой пример. ЗадаватьshowView: как действие кнопки.

- (IBAction)showView:(UIButton *)sender {
    // Create a view with the size and position of the tapped button
    UIView *view = [[UIView alloc] initWithFrame:sender.frame];
    // Set a color on the view
    view.backgroundColor = [UIColor redColor];
    // Add the new view to the main view. The new view will be displayed over any other views
    [self.view addSubview:view];
    // Animate the change of the new view's frame. We use the bounds of the main view.
    [UIView animateWithDuration:3.6 animations:^{
        view.frame = self.view.bounds;
    }];
}

Complete solution:

Сначала создайте свойства для вида и кнопки. Как вы их инициализируете, зависит от вас.

@property (strong, nonatomic) UIButton *button;
@property (strong, nonatomic) UIView *aView;
...
@synthesize button = _button;
@synthesize aView = _aView;

Затем создайте метод, который анимирует представление между двумя кадрами и удалит представление из его суперпредставления в конце анимации, если потребуется.

- (void)animateView:(UIView *)view 
           fromRect:(CGRect)from 
             toRect:(CGRect)to 
       inParentView:(UIView *)parent 
     removeWhenDone:(BOOL)remove 
{
    if (!remove) {
        [parent addSubview:view];
    }
    view.frame = from;
    [UIView animateWithDuration:3.6 animations:^{
        view.frame = to;
    } completion:^(BOOL finished) {
        if (remove) {
            [view removeFromSuperview];
        }
    }];
}

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

@property (assign, nonatomic) BOOL viewShown;
...
@synthesize viewShown = _viewShown;

- (void)setViewShown:(BOOL)viewShown
{
    _viewShown = viewShown;
    if (_viewShown) {
        // Insert your own toRect
        [self animateView:self.aView fromRect:self.button.frame toRect:CGRectMake(0, 0, 100, 100) inParentView:self.view removeWhenDone:NO];
    } else {
        [self animateView:self.aView fromRect:self.aView.frame toRect:self.button.frame inParentView:self.view removeWhenDone:YES];
    }
}

Наконец, в действии кнопки вы переворачиваетеviewShown имущество.

- (IBAction)showView:(UIButton *)sender {
    self.viewShown = !self.viewShown;
}
Error: User Rate Limit Exceeded Nitish Lamba
Error: User Rate Limit Exceeded

Похожие вопросы