Я знаю, что этот вопрос был опубликован довольно давно, но вот ответ для любого, кто застрял в этой проблеме.
Я просмотрел вопрос, с которым вы связались, rankAmateur, и я думаю, что простой способ исправить найденное там решение в соответствии с вашими потребностями состоит в замене свойства "a" в CGAffineTransform его свойством "d" в setTransform: метод .
- (void)setTransform:(CGAffineTransform)newValue;
{
CGAffineTransform constrainedTransform = CGAffineTransformIdentity;
// constrainedTransform.a = newValue.a;
constrainedTransform.d = newValue.d;
[super setTransform:constrainedTransform];
}
Я не очень хорошо разбираюсь в CGAffineTransorm, но это сработало для меня, и после просмотра документации кажется, что свойство "a" соответствует оси x представления, а свойство "d" соответствует оси y представления .
EDIT
Итак, вернувшись назад и поняв, что на самом деле был вопрос, я немного углубился в это, и я немного озадачен, но, испытав то же поведение, которое упоминает rankAmateur выше, для CGAffineTransform кажется невероятно необычным работать очень хорошо с zoomScale, когда масштабирование ограничено только по горизонтали, но не когда только вертикально.
Единственная гипотеза, которую я могу предложить, заключается в том, что она может иметь какое-то отношение к различным системам координат по умолчанию Core Graphics и UIKit, поскольку в этих системах координат ось X функционирует одинаково, а ось Y функционирует противоположно. Возможно, это каким-то образом запуталось в ранее упомянутом переопределении setTransform.