Есть ли способ инвертировать позицию касания в виде? - PullRequest
0 голосов
/ 20 ноября 2011

Я пишу метод, который изменяет изображение и переменную на основе позиции касания в CGRect. В настоящее время я вручную инвертирую позицию касания, используя серию операторов if. Я не уверен, что это особенно эффективный способ сделать это.

Это нормально работает для изменения изображения, но для изменения переменной (которую я еще не реализовал) мне нужно было бы масштабировать от 1 до 100 с шагом +1.

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];

    CGPoint point = [touch locationInView: self.view];
    if (CGRectContainsPoint(CGRectMake(0, 20, 117, 200), point)) {

    if (point.y >= 20 && point.y <= 32) //12
        imageA.image = [UIImage imageNamed:@"ChemA-15.png"];
    if (point.y >= 33 && point.y <= 45)
        imageA.image = [UIImage imageNamed:@"ChemA-14.png"];
    if (point.y >= 46 && point.y <= 58)
        imageA.image = [UIImage imageNamed:@"ChemA-13.png"];
    if (point.y >= 59 && point.y <= 70)
        imageA.image = [UIImage imageNamed:@"ChemA-12.png"];
    if (point.y >= 71 && point.y <= 82)
        imageA.image = [UIImage imageNamed:@"ChemA-11.png"];
    if (point.y >= 83 && point.y <= 94)
       imageA.image = [UIImage imageNamed:@"ChemA-10.png"];
    if (point.y >= 95 && point.y <= 106)
        imageA.image = [UIImage imageNamed:@"ChemA-9.png"];
    if (point.y >= 107 && point.y <= 118)
        imageA.image = [UIImage imageNamed:@"ChemA-8.png"];
    if (point.y >= 119 && point.y <= 130)
        imageA.image = [UIImage imageNamed:@"ChemA-7.png"];
    if (point.y >= 131 && point.y <= 142)
        imageA.image = [UIImage imageNamed:@"ChemA-6.png"];
    if (point.y >= 143 && point.y <= 154)
        imageA.image = [UIImage imageNamed:@"ChemA-5.png"];
    if (point.y >= 155 && point.y <= 166)
        imageA.image = [UIImage imageNamed:@"ChemA-4.png"];
    if (point.y >= 167 && point.y <= 178)
       imageA.image = [UIImage imageNamed:@"ChemA-3.png"];
    if (point.y >= 179 && point.y <= 190)
        imageA.image = [UIImage imageNamed:@"ChemA-2.png"];
    if (point.y >= 191 && point.y <= 202)
        imageA.image = [UIImage imageNamed:@"ChemA-1.png"];

    }
}

Есть ли лучший способ сделать это? Спасибо за любую помощь.

1 Ответ

3 голосов
/ 20 ноября 2011

Вы можете рассчитать, какое изображение вам нужно:

int image = 15 - (int)((point.y - 20) / 13);

, а затем сделайте из него строку и проверьте границы:

if(image >= 1 && image <= 15)
    imageA.image = [UIImage imageNamed:
                    [NSString stringWithFromat: @"ChemA-%d.png", image]];
...