2013-06-28 95 views
3

中心一個UIImageView我有一個UIImageView應從size (0,0) --> (93,75)動畫從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的新rect動畫它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

你所想要實現一個尺度變換,即從動畫尺寸(0,0)的UIView大小尺寸(W,H)。 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 
]; 

這個動畫會發生有關視圖的中心點,只要你想,這樣就避免了需要用anchorPointframe發揮,這可能會非常棘手。請從this answer瞭解更多關於frameanchorPoint之間的關係。

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