Измените масштаб GCRect до определенного CGSize

У меня вопрос о масштабировании кадра до определенного размера.

У меня есть CGRect, и я хотел бы изменить его размер до определенного CGSize.

Я бы переместил центр этого CGRect пропорционально моему значению масштабирования.


person Safari    schedule 07.09.2013    source источник
comment
Поймите, что CGRect - это просто структура C, содержащая 4 значения - origin.x, origin.y, size.width, size.height. А размер CGSize равен width и height. Для работы с ними определен ряд функций, но иногда проще (и легче запомнить) работать с частями напрямую.   -  person Hot Licks    schedule 07.09.2013


Ответы (2)


Если вы случайно изменяете UIView, вы можете воспользоваться следующим подходом:

CGPoint previousCenter = view.center;
// Set width and height here:
view.frame = CGRectMake(view.frame.origin.x,view.frame.origin.y, width, height); 
view.center = previousCenter;

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

Меня немного смущает ваш вопрос, поэтому, возможно, я не отвечаю на него правильно. Если вы используете CGAffineTransform для масштабирования, как предполагают ваши теги, это совсем другое дело.

person MaxGabriel    schedule 07.09.2013

Вы можете использовать CGRectInset(rect, x, y). Это вставит CGRect на x и y, а начало координат будет вставлено на x и y. (https://developer.apple.com/library/ios/documentation/graphicsimaging/reference/CGGeometry/Reference/reference.html#//apple_ref/c/func/CGRectInset)

CGSize targetSize = CGSizeMake(100.0f, 100.0f);
CGRect rect = CGRectMake(50.0f, 50.0f, 200.0f, 200.0f);
rect = CGRectInset(rect, roundf((rect.size.width - targetSize.width) / 2.0f), roundf((rect.size.height - targetSize.height) / 2.0f);

Изменить: обратите внимание, что я использую разницу между двумя размерами, уменьшенную вдвое. Мое оправдание здесь в том, что CGRectInset повлияет на весь прямоугольник. Я имею в виду ...

CGRect rect = CGRectMake(0, 0, 10, 10);
rect = CGRectInset(rect, 2, 2);

rect is now a CGRect with (2, 2, 6, 6)
person Malaxeur    schedule 07.09.2013