UIScrollView не прокручивается до нужного места с помощью setContentOffset: animated:

У меня есть серия изображений в UIScrollView. Когда пользователь отпускает прокрутку, я хочу, чтобы представление сосредоточилось на одном изображении. Я реализовал код, но основное поведение неверно. Мой вызов setContentOffset: animated: имеет правильные значения, но представление на самом деле не прокручивается до этой точки. Вот результат некоторой отладки:

2011-03-26 17:28:16.201 PivotMachine[39984:207] Dragging Beginning at: 270,   0
2011-03-26 17:28:16.322 PivotMachine[39984:207]     Dragging Ended at: 360,   0 --> 350,   0
2011-03-26 17:28:16.624 PivotMachine[39984:207]    Scrolling Ended at: 350,   0
2011-03-26 17:28:25.648 PivotMachine[39984:207] Dragging Beginning at: 447,   0

Как вы можете видеть, внутренне он думал, что прекратил перетаскивание на 360, поэтому правильно продвинулся до 350, где он должен был быть. Визуально вместо этого он сидит около 450, о чем он знает, когда я снова начинаю перетаскивать (да, я знаю, что вы не сразу начинаете, поэтому я очень медленно перетаскиваю, чтобы переместить только пару пикселей до события).

Это код перетаскивания (для моего подкласса UIScrollView):

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    CGPoint myLocation = self.contentOffset;
    NSLog(@"Dragging Beginning at: %3.0f, %3.0f", myLocation.x, myLocation.y);
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollV
{
    CGPoint myLocation = self.contentOffset;
    NSLog(@"   Scrolling Ended at: %3.0f, %3.0f", myLocation.x, myLocation.y);
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    // Auto-scroll to the center of the closest menu
    if (scrollView != self)
    {
        DLog(@"[ScrollMenu scrollViewWillBeginDecelerating] called with non-self");
        return;
    }
    CGPoint myLocation = self.contentOffset;
    int idx = [self indexOfMenuClosestTo:myLocation];
    CGPoint menuPoint = CGPointMake(menuPoints[idx], self.contentOffset.y);
    NSLog(@"    Dragging Ended at: %3.0f, %3.0f --> %3.0f, %3.0f",
         myLocation.x, myLocation.y, menuPoint.x, menuPoint.y);
    [self setContentOffset:menuPoint animated:YES];
}

Должен заметить, что это есть в симуляторе. Я пока не могу попробовать его на реальном телефоне, так как я еще не потратил деньги на программу разработки (ожидая, пока приложение будет почти готово к публикации, на случай, если у меня закончится пар :).

это проблема симулятора? Кто-нибудь видел нечто подобное? О да, я должен спросить: я что-то не так делаю? ;)

Продолжение: Я думаю, проблема в том, что анимация замедления конфликтует с моим вызовом - (void) setContentOffset: animated: . Обе анимации продолжают работать, и в представлении отображается, какая из них победит, но внутреннее состояние правильно основано на setContentOffset . Я думал, что setContentOffset отключил существующую анимацию. Есть ли, а если нет, используя пространство имен std; int main (int argc, char ** argv) {строка lineInput = ""; while (lineInput.length ()> 0) {cin >> ...

Я использую следующий код:

#include <iostream>
using namespace std;

int main(int argc, char **argv) {
    string lineInput = " ";
    while(lineInput.length()>0) {
        cin >> lineInput;
        cout << lineInput;
    }
    return 0;
}

следующей командой: эхо "Привет" | test.exe

Результат - бесконечный цикл, печатающий "Hello". Как я могу заставить его читать и печатать одно «Привет»?

12
задан 26 March 2011 в 23:36
поделиться