Если кто-нибудь наткнулся на приложение google maps для iOS, есть большая возможность увеличить/уменьшить одним пальцем: Doubletap на экране uiscrollview, а затем сразу же сдвиньте палец вверх или вниз, вниз для увеличения/уменьшения. Кто-нибудь знает, как это достигается? Был ли Google опубликован любой фрагмент?Doubletap и слайд/перетаскивание пальца для увеличения/уменьшения
ответ
Я добавил эту функциональность в my UIScrollView category.
Фактическое распознавание контактов легко, рассчитывая «правильное» (что бы ни было «правильно») zoomScale
является проблемой ... Если вы считаете, что категория не справляется с этим достаточно хорошо, пожалуйста, не стесняйтесь говорить мне и открывать новый выпуск на странице github.
В этом примере используются регулярные возможности масштабирования UIScrollView, который содержит UIImageView в качестве подзадачи. Вы можете найти реализацию такого масштабирования в библиотеке MWPhotoBrowser, например. _imageView, _doubleTapBeganPoint, _longPressBeganPoint, _minScale - это ваш класс (подкласс UIScrollView) iVars. Так начинается с инициализации:
UILongPressGestureRecognizer* lpgs = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(imageLongPressed:)];
lpgs.minimumPressDuration = .2;
[self addGestureRecognizer:lpgs];
Стандартный зум обработчика:
- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return _imageView;
}
Использование touchesBegan поймать двойное нажатие (UITapGestureRecognizer не хочет работать с UILongPressGestureRecognizer в какой-то причине):
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
NSUInteger tapCount = touch.tapCount;
switch (tapCount) {
case 2:
[self handleDoubleTapBegan:[touch locationInView:self.superview]];
break;
default:
break;
}
[[self nextResponder] touchesEnded:touches withEvent:event];
}
- (void)handleDoubleTapBegan:(CGPoint)touchPoint {
_doubleTapBeganPoint = touchPoint;
NSLog(@"image double tap began at location: %@", NSStringFromCGPoint(touchPoint));
}
Длительное нажатие и использование разницы в координатах Y для расчета масштаба масштабирования. _minScale хранит ваш первоначальный масштаб масштабирования, поэтому мы можем его восстановить.
- (void) imageLongPressed:(UIGestureRecognizer*)gesture {
if (gesture.state == UIGestureRecognizerStateBegan)
{
self.maximumZoomScale = _maxScale * 2;
self.minimumZoomScale = _minScale/3;
_longPressBeganPoint = [gesture locationInView:self.superview];
[self setZoomScale:_minScale animated:YES];
NSLog(@"image long press began at location: %@", NSStringFromCGPoint(_longPressBeganPoint));
}
else if (gesture.state == UIGestureRecognizerStateChanged)
{
CGPoint p = [gesture locationInView:self.superview];
//NSLog(@"image long press changed at location: %@", NSStringFromCGPoint(p));
if (CGPointEqualToPoint(_longPressBeganPoint, _doubleTapBeganPoint))
{
_zoom = _minScale + (p.y - _longPressBeganPoint.y)/100.0;
NSLog(@"zoom scale: %f", _zoom);
[self setZoomScale:_zoom animated:NO];
}
}
else if (gesture.state == UIGestureRecognizerStateEnded)
{
NSLog(@"image long press ended at location: %@", NSStringFromCGPoint([gesture locationInView:gesture.view]));
if (self.zoomScale < _minScale)
{
[self setZoomScale:_minScale animated:YES];
NSLog(@"min zoom scale: %f", _minScale);
}
}
}
Используйте UIPanGestureRecognizer для отслеживания перетаскивания вверх/вниз. Чтобы убедиться, что он только получает срабатывает на двойное нажатие, дать ему делегат, который выполняет следующие действия:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if gestureRecognizer == yourZoomRecognizer {
return touch.tapCount == 2
} else {
return true
}
}
Теперь обрабатывать сообщения, поступающие от жеста распознавани. Вы можете вывести значение масштаба, как так:
let zoomFactor: CGFloat = 1.01 //Each point of pan zooms in or out by this much
var zoomScale: CGFloat = 1 //Dummy variable for example purposes.
@IBAction func handleZoomGesture(sender: UIPanGestureRecognizer) {
if sender.state == .began {
//Set initial translation to reflect the current zoomScale
let logZoom = log(zoomScale)/log(zoomFactor)
sender.setTranslation(CGPoint(x: 0, y: logZoom), in: sender.view)
} else if sender.state == .changed {
let logZoom = sender.translation(in: sender.view).y
zoomScale = pow(zoomFactor, logZoom)
}
}
Это не показывает на самом деле установка zoomScale на Scrollview, что связка дополнительного кода - вы хотите, чтобы получить расположение и центр на сковороду жеста в обведите вокруг этого. Вы также захотите зажать zoomScale и, возможно, справиться с завершением масштабирования.
- 1. Leafletjs override doubletap
- 2. WebView Disable DoubleTap
- 3. MapView - отключить Doubletap Zoom
- 4. Реализовать SingleTap и DoubleTap в Objective-C
- 5. Реализация GestureDetector для перетаскивания, DoubleTap и singleTap a ImageView
- 6. Как реализовать интерфейс пальца и переднего пальца
- 7. Как переопределить DoubleTap из PhotoView
- 8. doubletap не работает в огурце
- 9. Жест DoubleTap на вид изображения
- 10. Doubletap-to-Zoom в Android
- 11. Указатель мыши и указатель пальца для выбора
- 12. Получить местоположение отпечатка пальца в iOS и Android
- 13. Обнаружение DoubleTap на компоненте Android «View»
- 14. UISwipeGestureRecognizer - выполнить действие с 2 пальца и 3 пальца - прошивкой
- 15. Этот селектор не работает с плагин doubletap
- 16. Swift SKSpriteNode: Detect Tap/DoubleTap/LongPress
- 17. Android ExpandableLists и добавление жестов DoubleTap, как добавить слушателя?
- 18. Android: DoubleTap не работает после изменения ориентации
- 19. DoubleTap в Ipad с помощью Jquery
- 20. iPhone компилируется для большого пальца.
- 21. Как получить доступ к алгоритму отпечатка пальца и отпечатка пальца для рукопожатия DTLS
- 22. Событие для поднятия одного пальца для UIPinchGestureRecognizer
- 23. Правило большого пальца для использования auto && и const auto &
- 24. android и Google Maps: отпечаток пальца для устройства
- 25. SDK для сканирования отпечатка пальца, как изображение и сосчитать гребни
- 26. Ускорение и замедление в положение пальца
- 27. Картинка для Android с жестом пальца
- 28. Libgdx applyforce для мыши или пальца направления
- 29. Правило большого пальца для атомарности @property?
- 30. Получить UIPinchGestureRecognizer позиции пальца
Никто не сталкивался с этим ??? –
Кажется, никто)) Отличная возможность стать первой! – faviomob
да! Какая радость .... –