2014-02-19 6 views
0

У меня есть UIImageView под названием platform1, platform2, platform3 и т. Д. У меня есть int, называемый platformNumber, исходящий из одного метода (method1) в другой метод (метод2).Как изменить имя переменной в зависимости от другой переменной?

method2 (содержание не полезные на мой вопрос):

CGPoint origin = platform1.center; 
CGPoint target = CGPointMake(platform1.center.x, platform1.center.y+10); 
CABasicAnimation *bounce = [CABasicAnimation animationWithKeyPath:@"position.y"]; 
bounce.duration = 0.1; 
bounce.fromValue = [NSNumber numberWithInt:origin.y]; 
bounce.toValue = [NSNumber numberWithInt:target.y]; 
bounce.repeatCount = 1; 
bounce.autoreverses = YES; 
[platform1.layer addAnimation:bounce forKey:@"position"]; 

Как изменить его так, везде, где platform1 .center.x появляется, оно меняется в зависимости platform[platformNumber] в platformNumber значение, переданное через?

Спасибо, любая помощь будет очень признательна!

+0

с использованием 'valueForKey', если они являются свойством объекта или выполняют переключатель в начале:' UIView * aPlateform; switch (thePlaftormNumber) {case 1: aPlateform = plaform1; break; и т. д.} ' – Larme

ответ

0

Ответы, предлагающие KVC, вообще не масштабируемы; не делайте. Вы не можете объявить переменную во время выполнения, поэтому она будет зависеть от того, сколько представлений изображений вы тоже можете добавить в свойство.

Вам нужно построить массив ваших изображений и перебрать их. Повторяю, KVC не предназначен для этого.

NSMutableArray *imageviews = [[NSMutableArray alloc] init]; 
//... 

[imageViews addObject:platform1]; 
[imageViews addObject:platform2]; 
[imageViews addObject:platform3]; 
//... 

Затем перебирать массив:

foreach (UIImageView *imgView in _imageViews) { 
    CGPoint origin = imgView.center; 
    CGPoint target = CGPointMake(imgView.center.x, imgView.center.y+10); 
    CABasicAnimation *bounce = [CABasicAnimation animationWithKeyPath:@"position.y"]; 
    bounce.duration = 0.1; 
    bounce.fromValue = [NSNumber numberWithInt:origin.y]; 
    bounce.toValue = [NSNumber numberWithInt:target.y]; 
    bounce.repeatCount = 1; 
    bounce.autoreverses = YES; 
    [imgView.layer addAnimation:bounce forKey:@"position"]; 
} 



int index = 3; 

_imageViews[index] 

возвращает вас platform2 в вашем примере (массив начинается с 0, поэтому вычитаем один)

+0

Мой метод1 имеет оператор if, говорящий:« Если это происходит, то platformNumber = 1 »или« если это произойдет, тогда platformNumber = 2 », а затем мой method2 читает номер платформы и должен соответственно изменить метод2. Будет ли это работать? – user3127576

+0

Массив содержит все ваши изображения в строке '. поэтому if (x) platformNumber = 1 {UIImageView * img = _imageViews [0];} Просто помните, что массивы начинают индексирование с 0-го индекса, тогда как мы, люди, начинаем с 1. так что платформа1 находится в позиции 0, платформа2 равна 1 и т. д. – davbryn

+0

это должно помочь http://rypress.com/tutorials/objective-c/data-types/nsarray.html – davbryn

0

В качестве альтернативы вы можете также создать функцию

-(UIImageView*)getPlatformForNumber:(int)number { 
    switch(number) 
    { 
     case 1: 
      return platform1; 

     case 2: 
      return platform2; 

     ... 
    } 

    // should not come here 
    return nil; 
} 

и при необходимости вызовите эту функцию. Иногда это решение пригодится - но массив, предложенный в решении davbryn, конечно, более масштабируемый.

Смежные вопросы