Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIView scale to 0 using CGAffineTransformMakeScale

Is it possible to scale a UIView down to 0 (width and height is 0) using CGAffineTransformMakeScale?

view.transform = CGAffineTransformMakeScale(0.0f, 0.0f);

Why would this throw an error of "<Error>: CGAffineTransformInvert: singular matrix." ?



Update: There is another way of scaling down a UIView to 0

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.3]; 
view.frame = CGRectMake(view.center.x, view.center.y, 0, 0);

[UIView commitAnimations];
like image 720
Ronnie Liew Avatar asked Oct 19 '08 05:10

Ronnie Liew


2 Answers

There are lots of times when the underlying frameworks need to invert your transform matrix. The inverse of a matrix is some matrix M' such that the product of your matrix M and the inverse matrix M' is the identify matrix 1.

1 = M * M'

The zero matrix does not have an inverse, hence the error message.

like image 196
Jason Harris Avatar answered Sep 28 '22 10:09

Jason Harris


I'm not sure it's possible to do this; you'll start running into divide-by-zero issues. If you try to do this, you'll be creating a transform that looks like:

   0  0  0
   0  0  0
   0  0  1

Which, when applied to ANY other transform, will produce the above transform.

Why not just hide the view (if you want to scale it out of sight) or set the scaling factor to something like 0.001 (if you want to scale it in)?

like image 42
Ben Gottlieb Avatar answered Sep 28 '22 11:09

Ben Gottlieb