Как перерисовать UIView - PullRequest
1 голос
/ 26 июля 2011

В контроллере loadDidLoad вызывается метод с потоком, например:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadImages) object:nil];
    [self.operationQueue addOperation:operation];
    [operation release]; 
}

Загрузите изображение методом loadImages и покажите его:

- (void) loadImages {

    @synchronized (self) {
        // download image...
        // ...
        // and next:
        UIImageView *imageView = [imageViews objectAtIndex:currentImageIndex];
        [imageView performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES];
        [imageView performSelectorOnMainThread:@selector(setImage:) withObject:[UIImage imageWithData:imageData] waitUntilDone:YES];
    }
         //...
}

, которые работают, если показывать в первый раз, в следующий раз я должен повернуть iphone, чтобы показать изображения. почему представление не перерисовывается?


я попробовал этот код в соответствии с советами:

// imageButton is a UIView with button, image and label
NSData   *imageData = [[HttpClient sharedInstance] getResourceWithCache:thumbPath];
[imageButton performSelectorOnMainThread:@selector(setImage:) withObject:[UIImage imageWithData:imageData] waitUntilDone:YES];
[imageButton performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES];
[imageButton drawRect:imageButton.frame];

но не работают.

Ответы [ 2 ]

4 голосов
/ 26 июля 2011

ваша проблема в строке

        [imageView performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES];

Вы должны вызывать setNeedsDisplay в self.view, а не в self, поскольку это метод для UIView, а не UIViewController.

Doubleпроверьте это, создав подклассы своего представления и поместив точку останова в drawRect:, поскольку setNeedsDisplay должен вызвать drawRect.

0 голосов
/ 26 июля 2011

Я предполагаю, что loadDidLoad является опечаткой, и что вы имели в виду viewDidLoad.

Метод viewDidLoad вызывается, когда контроллер представления завершает загрузку.Он делает это только один раз, если только приложение не получит предупреждение о памяти и контроллер представления не будет выгружен.

Если вы сохраняете контроллер представления и позже снова показывает тот же объект контроллера представления, метод viewDidLoad делаетне вызывать снова.

Если вам нужно выполнять действие каждый раз, когда контроллер представления помещается в стек представления, вы можете использовать viewWillAppear: или viewDidAppear:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...