2013-05-16 75 views
1

我有一個問題,我無法解釋。問題與UIButton上的CGAffineTransformMakeTranslation

我有一個視圖的viewController。 該視圖包含一個UIbutton和一個工具欄。 因爲toolBar是一個參數欄,所以我不希望它始終出現在我的視圖中。 所以我決定用一個按鈕來顯示它。

我使用界面生成器來設計我的視圖。 該按鈕將位於視圖的左上角和工具欄上方。 (來源:0,-44)

我聯繫我的按鈕,一個IBAction爲功能顯示我的工具欄:

- (IBAction)showOptions:(id)sender { 
    if([parametersBar isHidden]) 
    { 
     [parametersBar setHidden:NO]; 
     [UIView animateWithDuration:0.2 
         animations:^{ 
          [parametersBar setTransform:CGAffineTransformMakeTranslation(0, 44)]; 

         } 
     ]; 
    } 
} 

(parametersBar被設置爲隱藏在viewDidLoad中)

該作品精細。

但在這裏我們是:我的按鈕現在是由工具欄隱藏! 那麼翻譯呢?

不可能讓我的兩個元素的翻譯44px的!我以爲我做錯了什麼。但即使只是讓按鈕移動,翻譯的結果也不是預期的結果。

- (IBAction)showOptions:(id)sender { 
     if([parametersBar isHidden]) 
     { 
      [parametersBar setHidden:NO]; 
      [UIView animateWithDuration:0.2 
          animations:^{ 
           [parametersButton setTransform:CGAffineTransformMakeTranslation(0, 44)]; 

          } 
      ]; 
     } 
    } 

我已經把一些NSLogs前後動畫後:他們寫我的按鈕的預期位置,但我的設備屏幕上,它是不是在正確的地方。 然後在這兩個元素上執行翻譯會導致工具欄沒有放在正確的位置。

我在我的.xib中使用Autolayout。這可能是這些問題的原因嗎? 是否對請求這種轉換的按鈕執行轉換有影響?

(順便說一句,在3GS上運行相同的代碼有不一樣的效果:按鈕跳躍,並使得從那裏是上面(44px)到原來的位置預計翻譯)

好,這個問題很難解釋,但我希望能夠清楚。 如果您需要更多的精確度來了解,請不要猶豫,問我更多的細節。

回答

0

我找到了替代我的問題。

更換線:

[btShowParam setTransform:CGAffineTransformMakeTranslation(0, -44)]; 

隨着:

[btShowParam setCenter:CGPointMake(btShowParam.center.x, btShowParam.center.y + 44)]; 

使得按鈕動畫良好。

所以最後,我有:

[UIView animateWithDuration:0.2 
         animations:^{ 
          [parametersBar setCenter:CGPointMake(parametersBar.center.x, parametersBar.center.y + 44)]; 
          [btShowParam setCenter:CGPointMake(btShowParam.center.x, btShowParam.center.y + 44)]; 
          [btShowParam setAlpha:1]; 
         } 
     ]; 

但我還是想知道爲什麼的setTransform:不上我的UIButton工作,爲什麼這個功能不上幾個項目同時工作。