2017-02-20 23 views
0

Я реализую масштабирование на основе пинча и масштабирование происходит из верхнего левого угла представления, а не от масштабирования от центра. После нескольких попыток (это похоже на проблему происхождения cs или тому подобное), не найдя для этого хорошего решения, но должен быть некоторый (возможно, очевидный) способ масштабирования из центра обзора. Если на это был дан ответ раньше, по достоинству оцените указатель на ответ (не найден после расширенного поиска). Если нет, оценят вводные данные по правильному подходу.Удерживайте центр с центром в центре UIView (в отличие от масштабирования в верхнем левом углу)

Редактировать следующие ответы (спасибо): Вот код, я был первоначально используя:

функ pinchDetected (pinchGestureRecognizer: UIPinchGestureRecognizer) {

let scale = pinchGestureRecognizer.scale 
    view.transform = CGAffineTransformScale(view.transform, scale, scale) 
    pinchGestureRecognizer.scale = 1.0 

}

При крайнем случае, содержание внутри вида будет расширяться вправо и вниз, в отличие от того же + влево и вверх (следовательно, предположение, что оно не масштабируется «от центра»). Надеюсь, это делает его более ясным.

+0

Можете ли вы показать свою текущую реализацию, чтобы можно было прокомментировать это? – naglerrr

+0

Done @naglerrr - надеюсь, это уточняется. – aac

ответ

0

Это код, который вы ищете

view.transform = CGAffineTransformScale(view.transform, 1.1, 1.1); 

или Swift

view.transform = view.transform.scaledBy(x: 1.1, y: 1.1) 

Это увеличит высоту просмотров и ширину по предоставленной шкале. Теперь вы можете контролировать количество с помощью распознавателя жестов.

+0

Спасибо - я отредактировал мой вопрос, чтобы включить фрагмент кода, и это было то, что я уже использовал, если не ошибаюсь. Однако результатом было бы то, что контент, казалось бы, покажет контент, расширяющийся из верхнего левого угла обзора вправо и вниз. Надеюсь, что это еще раз поясняет и благодарит. – aac

0

Вы должны иметь возможность использовать код в этом question, чтобы увеличить его. Если вы хотите, чтобы он увеличивался с пальцев, см. Ответ на этот вопрос.

+0

Спасибо за указатель - добавьте комментарий, если на него будет задан вопрос, но, надеюсь, это даст ответ. – aac

0

Трудно узнать, что происходит, не видя ваш код. По умолчанию преобразования действуют на центр представлений, который, кажется, является тем, что вы хотите. Вы можете заставить трансляции действовать в какой-то другой точке, изменив свойство anchorPoint на уровне представлений.

Или вы можете создать преобразование о суровой точке, переведя начало координат в эту точку, сделав свое преобразование и переведя назад. например:

func *(left: CGAffineTransform, right: CGAffineTransform) -> CGAffineTransform { 
    return left.concatenating(right) 
} 


public extension CGAffineTransform { 
    static func scale(_ scale:CGFloat, aboutPoint point:CGPoint) -> CGAffineTransform { 
     let Tminus = CGAffineTransform(translationX: -point.x, y: -point.y) 
     let S = CGAffineTransform(scaleX: scale, y: scale) 
     let Tplus = CGAffineTransform(translationX: point.x, y: point.y) 

     return Tminus * S * Tplus 
    } 
} 

view.transform = CGAffineTransform.scale(2.0, aboutPoint:point) 

где точка относительно начала координат, которая по умолчанию является центром.

+0

Я проверил ваш код и для меня его масштабы представят о его центральной точке, как ожидалось. Поэтому я думаю, что проблема в другом месте. Вы проверили, что view.layer.anchorPoint находится в центре? Он должен быть (0,5,0,5). Другая возможность заключается в том, что вы не масштабируете представление, которое, по вашему мнению, масштабируется. Возможно, верхний угол вашего взгляда - это центр надзора, который вы действительно масштабируете? – DavidEC

+0

Хорошо спасибо. Я проверю эти две вещи. – aac

+0

точка привязки задана правильно - в этом случае представление добавляется в супервизор, который получает события пинча.Однако функция, обрабатывающая эти события, только масштабирует дочернее представление и что дочерний вид должен масштабироваться независимо? – aac