iphone - How to Make UIImageView Framesize Larger Following Collision Detection -
i have 2 uiimageviews named image1 , image2. want is: when image1 , image2 collide, image1 should grow larger( scale animation.) e.g. if image1 collides image2 ten times , image1 should become 10 times bigger.
i try use scale animation , cgrectintersectsrect collision, timer collision image become larger once time , and remains @ size after subsequent collisions.
here code :
-(void)collision { if(cgrectintersectsrect(imageview.frame,centre.frame)){ scale=scale+1; imageview.alpha=0.5; [imageview removefromsuperview]; [uiview beginanimations:nil context:nil]; [uiview setanimationduration:1.0f]; centre.transform = cgaffinetransformscale(centre.transform, scale, scale); [uiview commitanimations]; } } - (void)viewdidload { [super viewdidload]; [nstimer scheduledtimerwithtimeinterval:0.01 target:self selector:@selector(collision) userinfo:nil repeats:yes]; }
(techzen says -- author made point native french speaker , english bit rough.)
transforms not accumulative e.g. each transform operates on original matrix , not matrix returned last transform. why image1
object transform once , stays there. exact same transform starting @ beginning on , on again.
instead of trying accumulate or sum transforms, need accumulate or sum scale
variable. make scale
variable property of controller object holds method , progressively increment value make image1
larger.
something like:
-(void)collision { if(cgrectintersectsrect(imageview.frame,centre.frame)){ self.scale=self.scale+1; // scale no longer local value , increment imageview.alpha=0.5; [imageview removefromsuperview]; [uiview beginanimations:nil context:nil]; [uiview setanimationduration:1.0f]; centre.transform = cgaffinetransformscale(centre.transform, scale, scale); [uiview commitanimations]; } }
update:
to convert local variable i.e. 1 defined in single method, move definition header (.h) file so:
@implementation myviewcontroller:nsviewcontroller{ //... various definitions } @property nsinteger *scale;
... in implementation file (.m) add synthesize directive:
@synthesize scale;
now can use self.scale
refer scale
property anywhere in class , preserved. each time call:
self.scale=self.scale + 1;
... value increment , saved available next collision.
each time call collision
scale value change 1 e.g.
centre.transform = cgaffinetransformscale(centre.transform, 1, 1); ... centre.transform = cgaffinetransformscale(centre.transform, 2, 2); .... centre.transform = cgaffinetransformscale(centre.transform, 3, 3); //... , on
... cgaffinetransformscale
increasing transform imageview large size.
Comments
Post a Comment