1

Я хочу, чтобы иметь возможность зажимать масштаб изображения с помощью UIScrollView, так что subviews расширяются/сокращаются только по оси x.Пинч масштабирует UIScrollView только по оси x

Я создаю UIScrollView и используя addSubview для добавления UIViews. Каждый UIView имеет UILabel. Должен ли я держаться за эти UIView в массиве?

Когда я увеличиваю масштаб, я не хочу, чтобы на размер текста влияли только ширину каждого окна. Думаю, мне нужны минимальные и максимальные уровни масштабирования.

Что-то вроде этого используется в приложении Apple гараж. есть идеи как это сделать?

1. 
------------------------- 
|      | 
| ------ ------- -- | 
| | 1 | | 2 | | 3| < 10 UIView subclass boxes on a UIScollView, 
| | | |  | | |  with a UILabel in each UIView 
| ------ ------- -- | 
|      | 
------------------------- 

2. 
------------------------- 
|      | 
| ---------- --------| 
| | 1 more | | 2  | < During zoom-in pinch, boxes are stretched 
| |  | |  |  in x-axis only. Label remains same font size 
| ---------- --------|  and left aligned, showing more text 
|      | 
------------------------- 
+0

Что у вас пробовал? Внедрите распознаватель UIGesture, а в действии реализуйте изменение в 'subView' и вызовите' setNeedsDisplay' – Legolas

ответ

3

(во второй раз подряд, я хочу ответить на свой собственный Q с ответом, который намного проще, чем исходная предпосылка. Я думаю, я должен всегда смотреть с другой стороны, прежде чем задавать вопросы ..)

для UIView Я хочу, чтобы увеличить (ось й только), я подклассы вида и добавить этот метод:

- (void)setTransform:(CGAffineTransform)newValue; 
{ 
    newValue.d = 1.0; 
    [super setTransform:newValue]; 
} 

конечно, я получаю проблемы с UILabel добавили к этому UIView. Метка растягивается. Поэтому ответ заключается не в том, чтобы добавить его в UIView, а вместо этого добавить его непосредственно в представление прокрутки. Тогда, если у вас есть несколько поплавков, как свойства, представляющих оригинальное й происхождение и ширину этикетки, вы можете рассчитать это, используя шкалу мнения, скроллинга, в то время как вид прокрутки масштабирования:

-(void)scrollViewDidZoom:(UIScrollView *)scrollView 
{ 
    float scale = self.scrollView.zoomScale; 
    self.label.frame = CGRectMake(self.originalXorigin*scale, self.label.frame.origin.y, self.originalWidth*scale, self.label.frame.size.height); 
} 
1

Должен ли я держаться за эти UIViews в массиве?

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

Думаю, мне нужны минимальные и максимальные уровни увеличения.

Вам не повезло с обычным старым UIPinchGestureRecognizer. Но, честно говоря, это не так сложно закодировать в условной проверке для вашего взгляда?

Что-то вроде этого используется в приложении Apple гараж. есть идеи как это сделать?

Конечно, сделать UIPinchGestureRecognizer объект и использовать scale свойство для определения коэффициента х, который затем используется для CGAffineTransform() х масштаба вашего UIView.

+1

. Теперь вы видите, как могут возникать неопределенные ответы, когда я не вижу попыток писать код! – CodaFi

Смежные вопросы