Только горизонтальное масштабирование в 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;
}
Другие вопросы по тегам