0

2番目のビューをプッシュするのではなく、画面よりも大きい背景画像をパンする美的/娯楽目的のために、2つのビューの機能を組み合わせようとしています。1つはルートビューで、もう1つはプッシュビューでした。 。

そのため、ルートビューには、タップすると2番目のビューを押すのではなく、右へのスクロールビューのパンを開始するボタンがあります。これは問題なく機能します。

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

}

2番目のビューであった画面に表示されるのは、ユーザーが情報を入力することです。これはすべて、1つのビューに結合しようとする前に、2番目のプッシュビューとして機能しました。これらが組み合わされたので、キーボードをキーボードに合わせるために移動すると、スクロールビューアニメーションに不具合が発生します。(以下を参照)-キーボードの上の位置にスクロールする前に、元の座標にジャンプします。

    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は(0,160)であり、すべて正常に機能しました。上記のパンからの最初のオフセットに合わせるために、これを(645、160)に変更しました。ただし、ユーザーがtextViewをタップすると、キーボードの外観と連動してスムーズに上にスクロールするのではなく、元の事前にパンされた座標にジャンプし、右および上にスクロールして、最終的に正しい場所で終了します。

一言で言えば、私が欲しいのは元の座標A->(タップボタン)->座標Bにスクロール-> textView/keyboardshowsをタップ->座標Cにスクロール->キーボードを閉じた->スクロールして座標B。

私が得るのは元の座標A->(タップボタン)->座標Bにスクロール-> textView /キーボードショーをタップ->(AにジャンプしてからCにスクロール)->キーボードを閉じた->スクロールBを調整します。

'jump-to-A'グリッチを取り除くにはどうすればよいですか?

4

1 に答える 1

0

アニメーションワイヤーは、contentInsetsをミックスに追加する際にどこかで交差していました。キーボード用にこれをオンザフライで追加する代わりに、IB設定でscrollViewを大きくして、キーボードの高さがすでに考慮されているようにしました。次に、キーボードを簡略化しました。

    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);
    }];

ユーザーによる最初の選択とその後の選択時にキーボードに対応するために、垂直のみのスクロールで適切にアニメーション化します。

于 2012-11-01T06:18:35.060 に答える