2013-07-01 3 views
0

Я использую распознаватель жестов, чтобы манипулировать масштабированием кнопки с изображением. Я создал изображение, используяМаксимальный масштаб масштабирования изображений UIButton?

[self.button setImage:image forState:UIControlStateNormal]; 
[self.button setImage:image forState:UIControlStateHighlighted]; 

В моем крайнем случае обработчика жест распознавателя, я масштабирование кнопки, изменяя его frame.size:

self.button.frame = [self makeButtonFrame]; 

где makeButtonFrame использует текущий масштаб (регулируется пинч жест обработчик распознаватель):

- (CGRect) makeButtonFrame { 
    CGRect frame = CGRectMake (STROKE_WIDTH + DISTANCE_FROM_STROKE, 
           STROKE_WIDTH + DISTANCE_FROM_STROKE, 
           self.scale * self.defaultWidth, 
           self.scale * self.defaultHeight); 
    return frame; 
} 

Я считаю, что я не могу масштабировать изображение кнопки после определенной точки с этой техникой. И эта шкала, похоже, зависит от конкретного изображения (double ough!). Этот масштаб, похоже, составляет около 3-4.

В настоящее время я консервативно ограничиваю масштаб до коэффициента 3 в моем распознавателе жестов.

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

+0

«Невозможно масштабировать изображение кнопки за определенную точку» означает, что масштабирование слишком сильно заставляет изображение кнопки выглядеть плохо, или ??? Вы можете посмотреть «image.size» и установить максимальный масштаб на основе этого (т. Е. Не масштабировать кнопку за пределами размера изображения). – bobnoble

+0

Я имею в виду, что изменение рамки кнопки для увеличения ее размера не влияет. Он остается прежним. Я посмотрю на image.size. Благодарю. –

ответ

1

Не могу сказать наверняка, но я подозреваю, что этот «предел» на самом деле является размером вашего изображения. Когда вы устанавливаете кнопку image (в отличие от backgroundImage), ваше изображение будет уменьшено, если оно больше кадра. Если изображение меньше, то оно просто сосредоточено в кадре (кадр все еще определяет, в какой области реагирует на касания). Я думаю, что вы видите, что ваше изображение уменьшилось, когда вы поместили его в кнопку, и оно масштабируется до тех пор, пока оно не достигнет своего первоначального размера, и в этот момент он больше не масштабируется. Есть два решения этой:

1: не используйте backgroundImage вместо свойства изображения:

[self.button setBackgroundImage:image forState:UIControlStateNormal]; 

фоновое изображение всегда расширяется, чтобы заполнить кадр, независимо от того, насколько она велика или насколько она искажает изображение.

2: Используйте transform property для масштабирования. Это делается так:

self.button.transform = CGAffineTransformMakeScale(scaleAmountX, scaleAmountY); 

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

+0

Да, «предел» был фактическим размером изображения. Я просто проверил это. Я использовал ваш метод backgroundImage, и он работает как шарм. Спасибо за идеи! –

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