2012-10-31 67 views
0

爲了審美/娛樂的目的,平移大於屏幕的背景圖像,而不是推入第二個視圖,我試圖結合兩個視圖的功能,一個是根視圖,一個是根視圖其次是推動它的觀點。第二個滾動視圖移動動畫故障

所以,根視圖有一個按鈕,當點擊時,開始向右滾動滾動視圖而不是推動第二個視圖。這只是正常:

- (IBAction)nextButton:(id)sender { 
[UIView animateWithDuration:2.0 animations:^{ 
    _scrollViewToPan.contentOffset = CGPointMake(645, 0.0); 
}]; 

}

現在看來,這是第二個觀點出現在屏幕上涉及到用戶輸入的一些信息。所有這些都是在我嘗試將它合併到一個視圖之前的第二個推送視圖。現在它們被組合起來了,當它移動到容納keyboardWasShown中的鍵盤時,在滾動視圖動畫中會出現一個小故障:(見下文) - 它在滾動到鍵盤上方之前跳轉到原始座標。

NSDictionary* info = [aNotification userInfo]; 
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

UIEdgeInsets contentInsets = UIEdgeInsetsMake(645, 0.0, kbSize.height, 0.0); 
_scrollViewToPan.contentInset = contentInsets; 
_scrollViewToPan.scrollIndicatorInsets = contentInsets; 
CGRect aRect = self.view.frame; 
aRect.size.height -= kbSize.height; 
if (activeField == _nameTextView){ 
    CGPoint scrollPoint = CGPointMake (645, 160); 
    [_scrollViewToPan setContentOffset:scrollPoint animated:YES]; 
} 

if (activeField == _addressTextView){ 
    CGPoint scrollPoint = CGPointMake (645, 160); 
    [_scrollViewToPan setContentOffset:scrollPoint animated:YES]; 
} 

keyboardWillBeHidden:

[UIView animateWithDuration:0.3 animations:^{ 
    _scrollViewToPan.contentOffset = CGPointMake(645, 0.0); 
}]; 

當這是一個單獨的視圖,scrollPoint爲(0160)和所有運作良好。我將它改爲(645,160)以與上面所述的平移的第一偏移對齊。但是,當用戶點擊textView時,而不是與鍵盤外觀一起平滑滾動時,它會跳轉到原始的預先平移的座標,然後向右滾動並最終在正確的位置結束。

簡而言之,我想要的是原始座標A - >(點按鈕) - >滾動至座標B - >點擊textView /鍵盤顯示 - >滾動至座標C - >鍵盤消除 - - >滾動到座標B.

我得到的是原始座標A - >(tap button) - >滾動到座標B - >點擊textView/keyboard shows - >(跳轉到A然後滾動到C) - >鍵盤解散 - >滾動到座標B.

我該如何擺脫'跳到A'的故障?

+0

跳轉到A,然後滾動到C,這是否意味着從A到C的轉換意味着它正在對角滾動? – wlue

+0

@wlue:是的,它是 – j9suvak

+0

我想你的代碼中可能會有一些修改scrollview的副作用。我會嘗試通過在' - [UIScrollView setContentOffset:]'上創建一個條件斷點來進行調試,然後在點擊文本視圖之前打開它,然後通過運行堆棧來確定代碼的哪一部分導致了它。 – wlue

回答

0

將動畫導線添加到mixInset中的某處。我沒有在鍵盤上添加這個功能,而是在IB設置中使我的scrollView變大了,所以鍵盤高度已經佔了。然後簡化keyboardWasShown到:

if (activeField == _nameTextView){ 
    [UIView animateWithDuration:0.3 animations:^{ 
     _scrollViewToPan.contentOffset = CGPointMake(645, 140); 
    }]; 
} 
if (activeField == _addressTextView){ 

    [UIView animateWithDuration:0.3 animations:^{ 
     _scrollViewToPan.contentOffset = CGPointMake(645, 205); 
    }]; 

與垂直滾動僅由用戶來適應在第一和隨後的選擇鍵盤適當動畫處理。