Я пришел к SO с вопросом после долгого времени, я не узнал еще достаточно :(.фотография приложение, как прокрутка зрения прокрутки в режиме масштабирования с помощью жестов распознавателей
Я имею UIScrollView
, который имеет UIImageView
. Изображение UIImageView
должно изменяться с помощью правого и левого прокрутки. Я знаю, что переопределение штрихов UIScrollView
не будет хорошим и эффективным решением, поэтому я добавил прозрачный вид на UIScrollView
(а не как его подвью) покрывая границы UIScrollView
и переопределяя его методы прикосновения, чтобы сменить изображения на салфетки.
Теперь со шлемом p pinch gesture recognizer
, добавленный к моему прозрачному представлению Я могу увеличить изображение UIScrollView
и изображение программно. До сих пор я умею хорошо работать, но у меня есть еще одна типичная функциональность. Мне нужно перемещать увеличенное изображение пальцем вверх и вниз, чтобы я мог видеть обрезанное изображение. Я делаю это с помощью UILongPressGestureRecognizer
, добавленного в мой прозрачный вид. По истечении 1 секунды времени касания я добавляю UIImageView
с четырехсторонним изображением стрелки и добавляю его касание. Теперь, когда я двигаю пальцем, fourwayarrow image
следует пальцем, но изображение в прокрутке не следует за моим пальцем. Его вялый и часто работает, как будто я привязал эластичную нитку. Поэтому изначально мне приходится тянуть строку до некоторого порога (до этого момента вид прокрутки не перемещается), и когда он достигает этого уровня, он внезапно начинает выходить из-под контроля. Я добавляю здесь код для вас, чтобы посмотреть.
Пожалуйста, не стесняйтесь добавлять комментарии, если вам нужна какая-либо другая информация.
- (void) handleLongPress:(UILongPressGestureRecognizer *)longPressGestureRecognizer{
CGPoint touchLocation = [longPressGestureRecognizer locationInView:self.transparentLayer];
switch (longPressGestureRecognizer.state) {
case UIGestureRecognizerStatePossible: break;
case UIGestureRecognizerStateBegan:{
if (fourWayArrowImageView == nil) {
fourWayArrowImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"4wayarrow.png"]];
[fourWayArrowImageView setBackgroundColor:[UIColor clearColor]];
}
_previousLocation.x = touchLocation.x;
_previousLocation.y = touchLocation.y;
[fourWayArrowImageView setCenter:touchLocation];
[self.transparentLayer addSubview:fourWayArrowImageView];
}
break;
case UIGestureRecognizerStateChanged:{
float dx = (touchLocation.x - _previousLocation.x);
float dy = (touchLocation.y - _previousLocation.y);
CGPoint currentMaxOffset = [self currentMaxOffset];
CGPoint currentOffset = [self.rotatableImageViewContainingScrollView contentOffset];
float theScale = [self.rotatableImageViewContainingScrollView zoomScale];
currentOffset.x -= (dx*theScale);
currentOffset.y -= (dy*theScale);
[fourWayArrowImageView setCenter:touchLocation];
CGSize size = self.rotatableImageViewContainingScrollView.frame.size;
[self.rotatableImageViewContainingScrollView scrollRectToVisible:CGRectMake(currentOffset.x, currentOffset.y, size.width, size.height) animated:YES];
_prevMaxOffset = CGPointMake(currentMaxOffset.x, currentMaxOffset.y);
}
break;
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateFailed:
case UIGestureRecognizerStateEnded: [fourWayArrowImageView removeFromSuperview]; break;
}
}
Вы делаете это по-настоящему круговым путем. Вы должны взглянуть на образец кода Apple PhotoScroller. Вы можете использовать прокрутку пейджинга и использовать стандартную поддержку масштабирования/панорамирования, встроенную в UIScrollView. Вам не нужно делать всю эту работу самостоятельно. –
@MikeWeller Спасибо, Майк .. Но у меня есть требование клиента выполнять повороты с помощью салфетки на любом уровне масштабирования .. это невозможно сделать с помощью масштабирования и прокрутки по умолчанию для прокрутки, поскольку вы не можете прокручивать его, когда он масштабируется. Поэтому я должен был так поступать так –