2012-06-29 18 views
2

我想添加一個UIView的一個過渡式的縮放動畫這樣的:得到一個UIView的幀一縮放動畫

^
    | 
<---.---> 
    | 
    v 

觀看開始一點點框架(centerParent.x,centerParent.y, 20,20),然後切換到(centerParent.x,centerParent.y,300,300)。

但是,當我改變框架,我必須改變它,因爲視圖的位置(0.0),而不是它的中心點。有誰知道該怎麼做?

感謝

+0

你PLZ描述你的動畫?該圖很難讓我們理解。 –

+0

我試着更好地解釋它:) – damacri86

+0

也許你可以將它嵌入到UIScrollView中,並使用方法zoomToRect:animated:來獲得相同的效果。 –

回答

7

隨着您目前使用(不使用變換而只是調整視圖)的方法,你只需要重置原點或視圖的中心)。最簡單的是中心:

view.frame = CGRectMake(0, 0, 20, 20); 
    CGPoint center = view.center; 
    [UIView animateWithDuration: 1.0f animations:^{ 
     view.frame = CGRectMake(0, 0, 300, 300); 
     view.center = center; 
    }]; 

您還可以通過移動減去1/2來自x和y尺寸變化的差異復位的來源,但這更多的數學:

view.frame = CGRectMake(0, 0, 20, 20); 
    CGPoint origin = view.frame.origin. 
    [UIView animateWithDuration: 1.0f animations:^{ 
     origin.x -= (300 - 20)/2; 
     origin.y -= (300 - 20)/2; 
     view.frame = CGRectMake(origin.x, origin.y, 300, 300); 
    }]; 
可能
+0

我使用第二種解決方案。沒有重新縮放工作正常!謝謝:) – damacri86

+0

@Aaron Hayman - 你能告訴我如何用動畫縮小視圖。提前致謝。 –

+0

@PankajGupta你只需要使用與我在答案中描述的相同的數學。基本上,取出原點並減去新尺寸和舊尺寸之間差異的一半。將視圖框設置爲動畫塊內的新原點+大小。 –

1

爲了使視圖縮小,同時保持它自己的中心是容易的,但你需要使用轉換。這裏是一個代碼。 只需添加並連接一個視圖,將其命名爲zoomerView。

在這個例子中,我只是把這個添加到主視圖觸動結束。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    CGPoint center = zoomerView.center; 
    [UIView animateWithDuration:1 animations:^{ 
     zoomerView.transform = CGAffineTransformScale(zoomerView.transform, 1.2, 1.2); 
    }]; 
} 

希望這有助於你

+0

謝謝你的答案,但我使用設置框架,因爲我需要一個很好的決議。 – damacri86

0

試試這個

[UIView animateWithDuration:secs delay:1.0 options:option 
        animations:^{ 
         yourview.transform = CGAffineTransformScale(view.transform, 100.0, 100.0); 
        } 
        completion:nil]; 
+0

這可能會起作用,但視圖不會不斷重新渲染,所以如果動畫甚至稍微長一點,質量就會很差。 – pasawaya

+0

@qegal有理由。我使用設置框架,我解決它:) – damacri86