Пользовательская анимация UIScrollView - PullRequest
3 голосов
/ 12 декабря 2011

Я использую UIScrollView со списком кнопок, сделанных очень похожими на UIPickerView. Я только что реализовал встряхивание, чтобы перемешать, где при обнаружении встряхивания я установил смещение содержимого UIScrollView в положение randomShuffle, используя следующее.

[Singlescroll setContentOffset:CGPointMake(jumpX, jumpY+randShuffle*sepValue) animated:YES];

Вместо того, чтобы просто перемещать смещение контента в случайную позицию, соответствующую кнопке, я хотел бы реализовать анимацию воспроизведения в случайном порядке, когда представление почти «вращается», как игровой автомат, а затем оказывается в положении кнопки randomShuffle.

Я попытался сделать это, просто анимировав смещение к вершине UIScrollView, затем снова вернувшись вниз, прежде чем вернуться в положение randomShuffle (один за другим), однако это не сработало, и он просто перешел прямо к randomShuffle. позиция. Я понимаю, что я не пробовал это с таймером, поэтому анимация не задерживалась, однако я хотел бы избежать запуска таймера, если это возможно.

Есть ли встроенные анимации, которые могут справиться с этим? и если нет, можете ли вы подсказать, как я могу подойти к этому, прежде чем использовать таймеры? спасибо.

1 Ответ

5 голосов
/ 03 марта 2012

Вместо использования анимации: ДА, вы пытались поместить что-то вроде:

[UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    [Singlescroll setContentOffset:maximumOffsetPoint]; //spin all the way up?
}completion:^(BOOL finished){
    if (finished)
        //kick off another animation, to spin it back down:
        [UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
            [Singlescroll setContentOffset:CGPointMake(jumpX, jumpY+randShuffle*sepValue)];
        }completion:nil];
    }
}];

Я не знаю, отвечает ли это на ваш вопрос, но блоки завершения очень удобны и могут быть тем, что вам нужно. В пределах блока завершения вторая анимация будет вызываться только в конце первой анимации.

Кроме того, есть несколько методов animateWithDuration: в UIView, но, по моему опыту, этот метод более надежен для анимации свойств, таких как contentOffset и zoomToRect представлений прокрутки.

...