Как «щелкнуть» UIImageView? - PullRequest
3 голосов
/ 25 июня 2009

У меня есть несколько UIViews, которые я бы хотел, чтобы пользователь мог "пролистывать" по экрану. Они не прокручиваются. Они просто содержат растровое изображение (png). Может кто-нибудь указать мне пример кода и т. Д., Чтобы помочь мне начать? Что-то немного более тяжелое, чем MoveMe, которое помогает обнаружить «щелчок» (против «смещения» или «перетаскивания»), а затем переносит вид в направлении «щелчка»?

OpenGL, вероятно, излишний. Если возможно, я бы хотел остаться в сфере Core Graphics / Animation.

Ответы [ 6 ]

2 голосов
/ 28 июня 2009

Я бы сказал, что самый простой способ реализовать это - поместить ваши представления в контейнер UIScrollView с включенной подкачкой страниц и позволить ему беспокоиться обо всех «щелкающих» действиях. Прекрасно работает для меня.

Вы можете даже с некоторыми дополнительными усилиями иметь ленивую загрузку изображений.

1 голос
/ 03 августа 2009

Полагаю, вы могли бы легко добиться этого, взяв ответ nazgul42 и проверив также время между двумя упомянутыми событиями. Короткое время и большое расстояние вместе могут быть интерпретированы как щелчок. Также вы можете определить направление движения, рассчитав координаты точек касания.

0 голосов
/ 30 октября 2015

попробуйте использовать UIPanGentureRecognizer Пример кода:

UIPanGestureRecognizer *imageGesture = [[UIPanGestureRecognizer alloc]
                                         initWithTarget:self
                                         action:@selector(imageDragged:)];
[imageView1 addGestureRecognizer:imageGesture];

тогда

- (void)imageDragged:(UIPanGestureRecognizer *)gesture{
UIImageView *imageView = (UIImageView *)gesture.view;
CGPoint translation = [gesture translationInView:imageView];

imageView.center = CGPointMake(imageView.center.x + translation.x,
                               imageView.center.y + translation.y);
imageView2.center = imageView.center;
imageView3.center = imageView.center;

[gesture setTranslation:CGPointZero inView:imageView];}
0 голосов
/ 13 марта 2010

Я нашел здесь нить, хотя метод меня беспокоит -

http://discussions.apple.com/message.jspa?messageID=7862186

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

0 голосов
/ 26 июня 2009

Чтобы обнаружить касание, в контроллере представления вы можете использовать методы touchesBegan и touchesEnded, сохранить касание от touchesBegan, и если касание переместилось больше или больше на левую или правую сторону, это был щелчок, а не смещение влево или вправо.

0 голосов
/ 25 июня 2009

Предположим, у вас есть UIView с именем aView и два UIImageViews, page1 и page2. Предположим, что у вас уже есть page1 как подпредставление в aView, этот код перевернется с page1 на page2:

[UIView beginAnimations:@"someId" context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:aView cahe:YES];
[page1 removeFromSuperview];
[aView addSubview:page2];
[UIView commitAnimations];
...