У меня есть серия изображений в 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". Как я могу заставить его читать и печатать одно «Привет»?