Создание бесконечных UIImageViews без конфликтов имен - PullRequest
0 голосов
/ 17 ноября 2010

iPad приложение.OS 4.2.

У меня есть кнопка, которая при нажатии вызывает эту функцию, которая создает UIImageView и анимирует его (и вызывает второй блок анимации).Я создал еще одну кнопку, которая вызывает одну и ту же функцию и передает различные местоположения и разные URL-адреса на графику.

У меня начинаются глюки - первый рисунок, созданный с первой кнопки, имеет местоположения, переданные от второй кнопки.Вероятно, это связано с тем, что я не называю динамически имя UIImageView и не получаю из него коллизии.

Так как же мне динамически создавать и называть любое бесконечное количество UIImageViews?Тем более что для ссылки на UIImageView в двух функциях его необходимо объявить вне функций.

    -(void)makeSoundEffectWordAppear:(NSString *)imageName:(int)startingX:(int)startingY:(int)endingX:(int)endingY{
        myImage = [UIImage imageNamed:imageName];
        [testWord setImage:myImage];
        testWord = [[[UIImageView alloc] initWithFrame:CGRectMake(startingX,startingY,myImage.size.width,myImage.size.height)] autorelease];    
        [self.view addSubview:testWord];
        testWord.alpha=0;
        testWord.transform = CGAffineTransformMakeScale(.5, .5);

        [UIView beginAnimations:@"moveWord" context:nil];
            [UIView setAnimationDelegate:self];
            [UIView setAnimationDidStopSelector:@selector(fadeWord:finished:context:)];
            //[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
            [UIView setAnimationDuration:1];

            [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
            [UIView setAnimationBeginsFromCurrentState:YES];
            testWord.transform = CGAffineTransformMakeScale(1, 1);
            testWord.center = CGPointMake(endingX,endingY);
                        testWord.alpha=1;
        [UIView commitAnimations];
    }

- (void)fadeWord:(NSString *)animationID finished:(BOOL)finished context:(void *)context{
        [UIView beginAnimations:@"makeWordFade" context:nil];
    [UIView setAnimationDelegate:self];
        [UIView setAnimationDelay:5];
        testWord.alpha=0;
        testWord.transform = CGAffineTransformMakeScale(.5, .5);
        [UIView setAnimationDuration:1];
    [UIView commitAnimations];
}

1 Ответ

1 голос
/ 17 ноября 2010

У вас есть один указатель на testWord, а не указатель для каждого экземпляра.Вы должны использовать свойство контекста анимации для передачи определенного UIImageView, который вы хотите исчезнуть:

-(void)makeSoundEffectWordAppear:(NSString *)imageName:(int)startingX:(int)startingY:(int)endingX:(int)endingY{
    UIImage *myImage = [UIImage imageNamed:imageName];
    UIImageView *testWord = [[[UIImageView alloc] initWithImage:myImage] autorelease];
    CGRect frame = [testWord frame];
    frame.origin.x = startingX;
    frame.origin.y = startingY;
    [testWord setFrame:frame];
    [self.view addSubview:testWord];
    testWord.alpha=0;
    testWord.transform = CGAffineTransformMakeScale(.5, .5);

    [UIView beginAnimations:@"moveWord" context:testWord];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDidStopSelector:@selector(fadeWord:finished:context:)];
        //[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
        [UIView setAnimationDuration:1];

        [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
        [UIView setAnimationBeginsFromCurrentState:YES];
        testWord.transform = CGAffineTransformMakeScale(1, 1);
        testWord.center = CGPointMake(endingX,endingY);
                    testWord.alpha=1;
    [UIView commitAnimations];
}

- (void)fadeWord:(NSString *)animationID finished:(BOOL)finished context:(void *)context{
    UIImageView *testWord = (UIImageView *)context;
    [UIView beginAnimations:@"makeWordFade" context:context];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDelay:5];
        testWord.alpha=0;
        testWord.transform = CGAffineTransformMakeScale(.5, .5);
        [UIView setAnimationDuration:1];
    [UIView commitAnimations];
}
...