Только горизонтальное масштабирование в UIScrollView
Я использую UIPinchGestureRecognizer
настроить ширину (не высоту) вида в UIScrollView
, Это работает с жестом пинч scale
собственность, но contentOffset
скроллвью не меняется, поэтому вид всегда увеличивается справа. Это выглядит немного лучше, если я масштабирую contentOffset
вместе с шириной, с тех пор вид увеличивается с самой левой стороны экрана.
Проблема заключается в том, что расположение щепотки игнорируется - поэтому всегда кажется, что щепотка находится на левой стороне экрана.
Мне нужно как-то учесть расположение щепотки на contentOffset
регулировка, чтобы смещение можно было отрегулировать так, чтобы содержимое в точке зажима находилось в одном месте.
Примечание: я не могу использовать встроенный UIScrollView
жест масштабирования, так как я хочу, чтобы масштабирование было только одно измерение, горизонтальное. Кроме того, я не могу использовать преобразования на UIView
как мне нужно использовать UIScrollView
,
1 ответ
Я ущипнул масштабирование графика, так что пинч регулирует ограничение ширины в представлении графика.
Вот обработчик пинча:
- (void) doPinch:(UIPinchGestureRecognizer*)pinch;
{
CGFloat width = self.graphWidthConstraint.constant;
CGFloat idealWidth = 1500;
CGFloat currentScale = width / idealWidth;
CGFloat scale = currentScale - (1.0 - pinch.scale);
CGFloat minScale = 0.5;
CGFloat maxScale = 3.0;
scale = MIN(scale, maxScale);
scale = MAX(scale, minScale);
CGPoint locationScrollview = [pinch locationInView:self.graphScrollView];
CGFloat pinchXNormalized = locationScrollview.x / width;
CGPoint locationView = [pinch locationInView:self.view];
// resize
CGFloat newWidth = idealWidth * scale;
self.graphWidthConstraint.constant = newWidth;
// set offset to position point under touch
CGFloat pinchXScaled = newWidth * pinchXNormalized;
CGFloat x = pinchXScaled - locationView.x;
self.graphScrollView.contentOffset = CGPointMake(x, 0);
pinch.scale = 1;
}