У меня вопрос о масштабировании кадра до определенного размера.
У меня есть CGRect, и я хотел бы изменить его размер до определенного CGSize.
Я бы переместил центр этого CGRect пропорционально моему значению масштабирования.
У меня вопрос о масштабировании кадра до определенного размера.
У меня есть CGRect, и я хотел бы изменить его размер до определенного CGSize.
Я бы переместил центр этого CGRect пропорционально моему значению масштабирования.
Если вы случайно изменяете 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
для масштабирования, как предполагают ваши теги, это совсем другое дело.
Вы можете использовать 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)
origin.x
,origin.y
,size.width
,size.height
. А размер CGSize равенwidth
иheight
. Для работы с ними определен ряд функций, но иногда проще (и легче запомнить) работать с частями напрямую. - person Hot Licks   schedule 07.09.2013