Премащабирайте 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 ще засегне целия rect. Това, което имам предвид с това е...

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