2013-06-28 3 views
3

У меня есть UIImageView, которые должны анимировать из size (0,0) --> (93,75)анимировать в UIImageView от центра UIImageView

У меня есть следующие

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionTransitionNone 
       animations:^{ 
        imgButton.layer.anchorPoint = CGPointMake(imgButton.bounds.size.width/2, imgButton.bounds.size.height/2); 
        CGRect btnFrame = imgButton.frame; 
        btnFrame.size.width = 105; 
        btnFrame.size.height = 85; 
        imgButton.frame = btnFrame; 
       } 
       completion:^(BOOL finished) { 
        [self animageButton2:imgButton]; 
       }]; 

Это работает, но единственная проблема, у меня есть то, что она не оживляющий от центра UIImageView, но в верхнем левом углу.

У кого-нибудь есть ключ?

+0

Вы действительно прочитали документацию на 'anchorPoint'? Я думаю, нет, потому что вы не даете ему правильного значения.Кроме того, он применяется только к манипуляциям CGAffineTransform, а не по размеру. Если вы хотите сделать это таким образом, вам придется самостоятельно отрегулировать происхождение. Я предлагаю установить нулевую шкалу и оживить ее до 1. – borrrden

ответ

0

Что я предлагаю, может быть своего рода взломать, но это будет более простой способ добиться того, что вы хотите:

  • Вы можете установить начальный кадр ImageView как:

    CGRectMake(center, center, 0, 0); 
    

    Так в ваш случай будет что-то ближе к:

    CGRectMake(46, 37, 0, 0); 
    
  • Затем анимировать его с новым прямоугольником из somethi ng вот так:

    CGRectMake(0, 0,93,75); 
    

    Для этого можно использовать простую UIViewAnimation;

    [UIView beginAnimations:@"zoom" context:NULL]; 
        [UIView setAnimationDuration:0.3]; 
        imageView.frame = CGRectMake(0, 0, 93, 75); ; 
        [UIView commitAnimations]; 
    

Надежда Она работает

0

То, что вы пытаетесь достичь, это масштаб преобразования, т.е. анимировать размер UIView от размера (0,0) до размера (ш, ч). Тот же эффект может быть достигнут CGAffineTransformMakeScale.

Первоначально при создании вида применяйте CGAffineTransformMakeScale(0.0,0.0), а затем размер анимированного размера до CGAffineTransformMakeScale(1.0,1.0).

Код:

// Create the view and apply correct frame 
UIView *tagView = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 100, 100)]; 
tagView.tag = kTag; 
//Apply scale transform, to make size(0,0) 
tagView.transform = CGAffineTransformMakeScale(0,0); 
[self.view addSubview:tagView]; 

/// ............ 

UIView *tagView = [self.view viewWithTag:kTag]; 
//Now animate the view size scale up 
[UIView animateWithDuration:0.5 
     delay:0 
     options:UIViewAnimationOptionCurveEaseOut 
     animations:^{ 
         tagView.transform = CGAffineTransformMakeScale(1.0,1.0); 
        } 
     completion:NULL 
]; 

Эта анимация будет происходить вокруг центральной точки зрения, как вы хотите, что позволяет избежать необходимости играть с anchorPoint и frame, что может быть сложно. Подробнее о связи между frame и anchorPoint от this answer.

2

просто попробуйте с этим. импорт #import <QuartzCore/QuartzCore.h> затем положить ниже код при добавлении uimageView в подвид из self.view

CABasicAnimation *zoomAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
[zoomAnimation setDuration:0.8]; 
[zoomAnimation setRepeatCount:1]; 
[zoomAnimation setFromValue:[NSNumber numberWithFloat:0.1]]; 
[zoomAnimation setToValue:[NSNumber numberWithFloat:1.0]]; 
[zoomAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
[[imageView layer] addAnimation:zoomAnimation forKey:@"zoom"]; 
+0

привет. Я хочу добавить некоторые действия в конце анимации, как это сделать? – kemdo

4

Я решил ее с помощью Borrden. Это мое решение.

Сначала создайте ImageView

UIImageView *imgLineup = [[UIImageView alloc]initWithFrame:CGRectMake(10, y, 93, 75)]; 
imgLineup.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.0, 0.0); 

И затем к следующему.

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         imgButton.layer.anchorPoint = CGPointMake(0.5, 0.5); 
         imgButton.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0); 

        } 
        completion:^(BOOL finished) { 
         NSLog(@"done"); 
        }]; 
+3

Значение по умолчанию 'anchorPoint' равно' (0.5.0.5) 'поэтому переназначение избыточно. – Amar

Смежные вопросы