UIImage не обновляется при вызове из другого объекта - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть UIImageView с методом для изменения изображения, которое он отображает. Он работает нормально, если метод запускается из события касания, полученного самим UIImageView, но тот же метод не может обновить UIImageView, если вызывается из другого объекта, который вызвал событие касания. У меня есть вызов NSLog в рассматриваемом методе и, таким образом, я вижу, что метод вызывается в обоих случаях. Но только в одном случае я вижу фактическое изменение изображения, в другом случае вид не обновляется. Когда это работает, мне не нужно устанавливать setNeedsDisplay или setNeedsLayout, но это то, что я пытался решить проблему. Установка needsDisplay и needsLayout в UIImageView, а также в его суперпредставлении. Но безрезультатно. Я вижу, что изображение действительно изменяется, если я поворачиваю устройство, которое вызывает обновление, и я вижу, что UIImageView действительно изменился.

Суперпредставление вызывает метод eventAtLocation: для коллекции OutletCollection с использованием makeObjectsPerformSelector: withObject:

Конечно, это выглядит как смущающая ошибка с моей стороны, но я не могу понять это с нескольких часов. У меня заканчиваются идеи, что попробовать: - (

Вот код, о котором идет речь:

- (void)eventAtLocation:(NSValue *)location
{
    CGPoint loc = [self.superview convertPoint:[location CGPointValue] toView:self];
    if ([self pointInside:loc withEvent:nil]) {
        if (!self.isAnimating) {
            [self autoSwapImage];
        }
    }
    else{
        if (self.isAnimating) {
            [self cancelAnimation];
        }
    }
}

- (void)cancelAnimation
{
    self.isAnimating = NO;
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
}

- (void) swapImage
{
    currentImage++;
    if (currentImage > numberOfImages)
        currentImage = 1;

    NSLog(@"set image to %i", currentImage);
    self.image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%i.jpg", currentImage]];
    [self setNeedsDisplay];
}

- (void) autoSwapImage
{
    self.isAnimating = YES;
    [self swapImage];
    [self performSelector:@selector(autoSwapImage) withObject:self afterDelay:0.1];
}

// Следующее работает, но если eventAtLocation: вызывается из формы, вызывается superview swapImage (-> вывод NSLog появляется), но представление не обновляется - (void) touchesBegan: (NSSet *) касается события Event: (UIEvent *) { // [self autoSwapImage]; } * +1010 *

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    //[NSObject cancelPreviousPerformRequestsWithTarget:self];
}
@end

1 Ответ

0 голосов
/ 16 февраля 2012

Похоже, что вы на самом деле не устанавливаете изображение UIImageView, вы просто устанавливаете self.image.Вам нужно сделать что-то вроде

self.myImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%i.jpg", currentImage]];

Также вы захотите поставить галочку, что [UIImage imageNamed:] на самом деле возвращает изображение, и что оно не ноль.

UIImage* image = [UIImage imageNamed:@"someImage"];
if(!image){
  NSLog(@"%@",@"Image Not Found");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...