Scale view to center subview
-
31-05-2021 - |
문제
I've got a problem which I can't seem to solve.
I'd like to scale my application's view so that it appears that a view has 'zoomed in' so that it maintains its aspect ratio and fills the entire width of the screen.
I (think) I have some math to make this work, but I'm not sure how to apply this in a CGAffineTransform statement, or how to center the view.
Step 1:
Scale the view:
float scaleFactor = (320 / boxWidth);
self.view.transform = CGAffineTransformMakeScale(scaleFactor, scaleFactor);
Step 2:
Position the view so it appears it's centered:
CGRect newFrame = self.view.frame;
newFrame.x = 20;
newFrame.y = mainBox.frame.origin.y;
self.view.frame = newFrame;
And this is where I'm stuck. I'm not sure how to position the view so that it appears it's centered.
Here's an image to demonstrate what I'd like to achieve:
Bascially, I'd like the view to scale so that the black box animates into the position and size of the red box.
I'm a bit stuck on this, so any help is appreciated.
해결책
In such cases it's easier to just calculate the final frame of the view and set it inside an animation block:
CGRect newFrame = self.view.frame;
newFrame.size.height *= 320.0f / newFrame.size.width;
newFrame.size.width = 320.0f;
newFrame.origin.x = 0.0f;
// Set newFrame.origin.y as desired
[UIView animateWithDuration: 0.5 animations: ^{
self.view.frame = newFrame;
}];