Преобразования не накапливаются, например каждое преобразование работает с исходной матрицей, а не с матрицей, возвращаемой последним преобразованием. Вот почему вы image1
объект трансформируетесь один раз и затем остаетесь там. Это одно и то же преобразование, начинающееся с начала снова и снова.
Вместо того, чтобы пытаться накапливать или суммировать преобразования, вам нужно накапливать или суммировать переменную scale
. Сделайте переменную scale
свойством объекта контроллера, который содержит метод, а затем постепенно увеличивайте значение, чтобы увеличить image1
.
Что-то вроде:
-(void)collision {
if(CGRectIntersectsRect(imageView.frame,centre.frame)){
self.scale=self.scale+1; // scale is no longer a local value and will 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];
}
}
Обновление:
Чтобы преобразовать локальную переменную, т.е. определенную в одном методе, вы перемещаете определение в файл заголовка (.h) следующим образом:
@implementation MyViewController:NSViewController{
//... various definitions
}
@property NSInteger *scale;
... затем в файле реализации (.m) добавьте директиву syntheize:
@synthesize scale;
Теперь вы можете использовать self.scale
для ссылки на свойство scale
в любом месте класса, и оно будет сохранено. Каждый раз, когда вы звоните:
self.scale=self.scale + 1;
... значение будет увеличиваться и будет сохранено, чтобы оно было доступно для следующего столкновения.
Каждый раз, когда вы звоните collision
значение шкалы будет меняться на единицу, например
centre.transform = CGAffineTransformScale(centre.transform, 1, 1);
...
centre.transform = CGAffineTransformScale(centre.transform, 2, 2);
....
centre.transform = CGAffineTransformScale(centre.transform, 3, 3);
//... and so on
... CGAffineTransformScale
будет увеличивать преобразование изображения в большой размер.