2014-03-25 66 views
0

我想在Xcode中做一個類似於動畫的「飛入」PowerPoint。創建一個飛行動畫

視圖將從給定方向(上,下,左,右)飛入並停留在屏幕中央一段給定的時間,然後繼續沿相同方向飛行,直至屏幕熄滅

我試着用不同的動畫選項打,但都像:

UIViewAnimationOptionTransitionNone 

所以我做錯了什麼?

UIViewAnimationOptions animationOption[] = { 
UIViewAnimationOptionTransitionNone, 
UIViewAnimationOptionTransitionFlipFromLeft, 
UIViewAnimationOptionTransitionFlipFromRight, 
UIViewAnimationOptionTransitionCurlUp, 
UIViewAnimationOptionTransitionCurlDown, 
UIViewAnimationOptionTransitionCrossDissolve, 
UIViewAnimationOptionTransitionFlipFromTop, 
UIViewAnimationOptionTransitionFlipFromBottom 
}; 

self.frame = p_newFrame; 
int idx = arc4random() % 8; 
[UIView animateWithDuration:p_duration delay:0.8 options:animationOption[idx] animations:^{ 
     self.alpha = 1.0; 
} completion:^(BOOL finished) { 
}]; 

任何人都可以幫助代碼示例?

+0

你看過視圖控制器轉換API嗎? – Aaron

+0

@Aaron我用'查看控制器轉換API',看起來它從ios 7開始我的應用程序支持6和以上 –

+0

你想只動畫添加一個子視圖(和它本身有子視圖)讓它飛入和然後離屏?或者你想動畫視圖控制器之間的轉換(如果是這樣,這些視圖控制器的視圖佔用整個屏幕或不)?這些屏幕是否正在過渡到故事板中的場景或者您要以編程方式創建的內容?序列和動畫是預先確定的嗎?多一點背景會有所幫助。 – Rob

回答

1

很多方法可以實現這一點,但一個簡單的方法是添加一個子視圖,設置初始的frame,使其初始屏幕外。然後,動畫改變frame,以便它在可見屏幕內。然後,在完成塊中,有另一個動畫(這個有一個延遲)來動畫從另一個方向飛起來。例如。

CGRect frameVisible = self.view.bounds;        // Or use `CGRectMake` to specify something smaller than the whole screen 
CGRect frameRight = frameVisible; 
frameRight.origin.x += self.view.frame.size.width; 
CGRect frameLeft = frameVisible; 
frameLeft.origin.x -= self.view.frame.size.width; 

UIView *subview = [[UIView alloc] initWithFrame:frameRight];   // add if off screen to right 

// just doing this so I can see it; you'd presumably add all sorts of subviews 
// (labels, images, whatever) 

subview.backgroundColor = [UIColor lightGrayColor];     // I'm just going to make it gray, so I can see it 

[self.view addSubview:subview]; 

[UIView animateWithDuration:0.5 delay:0.0 options:0 animations:^{ 
    subview.frame = frameVisible;          // animate it on screen 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:0.5 delay:3.0 options:0 animations:^{ // wait 3 sec, then ... 
     subview.frame = frameLeft;          // ... animate it off screen to left 
    } completion:^(BOOL finished) { 
     [subview removeFromSuperview];         // when all done, remove it from screen 
    }]; 
}]; 

只要調整你使用的frame屬性來控制它開始,它停止在屏幕上的各種CGRect值,以及它飛走到。