2013-10-25 39 views
0

我試圖模仿雅虎天氣應用程序之間的城市屏幕過渡,我無法弄清楚它是什麼樣的轉換。任何線索?找不到在yahoo天氣應用程序中使用的uiview轉換

我真的很感激你的時間。 感謝

編輯:

我其中有一個子視圖slideView CTRLER。 sliderview有一個圖像,子視圖有文本。當我進行滑動操作時,帶文本的文本視圖必須以較慢的速度移動並拖動視圖ctrler,並且該實習生應該開始拖動下一個視圖ctrler,該視圖ctrler是滑塊Ctrler的一個實例。

+1

並非所有人都使用雅虎天氣應用程序(它也可能會更改)。添加一兩張圖片或更好地描述你想要達到的目標。 – rmaddy

回答

0

它不是默認的,但我在舊的應用程序在你的視圖實現類似於它

  1. 註冊的手勢和檢測設置isFromLeftSide相應

  2. 呼叫以下。做微調該按您的要求

    [self.view addSubview:mySlidingView]; 
         mySlidingView.frame = // set offscreen frame, in the direction you want it to appear from depending on flag isFromLeftSide 
         [UIView animateWithDuration:8.0 
             animations:^{ 
              mySlidingView.frame = // desired end location 
               }]; 
    
1

沒有內置的過渡,這是否對你(我假設你在談論的是在不同的轉變他們的frame/center圖像比視圖本身更高)。你可能必須自己寫。需要對手勢識別器和視圖動畫有一些基本的熟悉。

基本效果是在更改這些視圖(或其超視圖)的frame時,同時調整兩個圖像視圖的center屬性。 (或者,你可以通過使圖像視圖達到這個效果,其contentModeUIViewContentModeCenter並且只是改變frame。)我建議你從一些簡單的效果測試開始並從那裏開始構建。

例如,我創建了具有兩個圖像視圖,其自動佈局約束條件定義如下場景:

 
H:|[leftImageView][rightImageView]| 
V:|[leftImageView]| 
V:|[rightImageView]| 

我然後限定的寬度約束爲leftImageView,並迷上它到IBOutlet爲那個約束,例如leftImageWidthConstraint。然後,我有一個UIPanGestureRecognizer可以處理手勢,簡單地改變這個leftImageWidthConstraint據此(並帶有自動佈局,幀的其餘部分將自動爲我從計算):

- (void)handlePan:(UIPanGestureRecognizer *)gesture 
{ 
    CGPoint translate = [gesture translationInView:gesture.view]; 
    static CGFloat width; 

    if (gesture.state == UIGestureRecognizerStateBegan) 
    { 
     width = self.leftImageWidthConstraint.constant; 
    } 

    CGFloat newWidth = width + translate.x; 

    if (newWidth < 0) 
     newWidth = 0; 
    else if (newWidth > self.view.bounds.size.width) 
     newWidth = self.view.bounds.size.width; 

    self.leftImageWidthConstraint.constant = newWidth; 

    // if you let go, animate the views to their final position 

    if (gesture.state == UIGestureRecognizerStateEnded) 
    { 
     // if more than half way, set left view's target width to take up full width, 
     // otherwise set left view's target width to zero 

     if (newWidth > (self.view.bounds.size.width/2.0)) 
      newWidth = self.view.bounds.size.width; 
     else 
      newWidth = 0; 

     // animate the changing of the constraint (and thus the `frame`) accordingly 

     self.leftImageWidthConstraint.constant = newWidth; 
     [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
      [self.view layoutIfNeeded]; 
     } completion:nil]; 
    } 
} 

因此,當我平移跨越,兩個圖像剪裁的幀中的中心:

enter image description here

這是一個非常基本實現的想法。儘管如此,還是有大量的實現細節(自定義容器vs子視圖,自動佈局vs不是,等等),所以除非你回答其中的一些問題,否則很難更具體。

+0

感謝您的寶貴答案。這是我要走的方向。我雖然我需要使用附件行爲。我已經編輯了具體描述的答案。 – pa12