Загрузить изображение и изображение UIButton BG - PullRequest
1 голос
/ 31 марта 2012

Я пытаюсь загрузить некоторые изображения с сервера, затем установить эти изображения в качестве фонового изображения для некоторых кнопок UIB.

поэтому первая загрузка изображений:

NSString *urlMag1 = [NSString stringWithFormat:@"http://myweb.com/i224_mag1.png"];
    NSString *urlMag2 = [NSString stringWithFormat:@"http://myweb.com/i224_mag2.png"];
    NSString *str = [NSString stringWithFormat:urlMag1,urlMag2,nil];

    NSData *data = [NSData dataWithContentsOfFile:str];
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    [data writeToFile:path atomically:YES];

    UIImage *imgMag1 = [UIImage imageNamed:@"i224_mag2.png"];
    [mag2 setBackgroundImage:imgMag1 forState:UIControlStateNormal];

но ничего не происходит !! и как я могу проверить, находятся ли эти изображения в каталоге, чтобы избежать дополнительной загрузки

Буду признателен, если вы поможете мне решить эту проблему

спасибо!

EDITED @ Фернандо Сервантес

Я создал метод для установки кнопок изображений BG примерно так, но я не знаю, почему не работает!

- (UIImage *)loadImages :(NSString *)fileNames ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {

    [[NSFileManager defaultManager] fileExistsAtPath:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", fileNames, extension]]];
    return 0;
}

и установите изображения BG:

- (void)buttonsBGImage {



    UIImage * bgMag2 = [self loadImages:@"i224_mag2" ofType:@"png" inDirectory:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]];

    [mag2 setBackgroundImage:bgMag2 forState:UIControlStateNormal];


}

но на самом деле ничего не происходит! даже я проверяю файл, и он находится в каталоге приложения

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

Следующий подход может вам немного помочь.

Сохранить

-(void) saveFile:(NSString *)fileName ofType:(NSString *)extension fromURL:(NSString *)fileIndexPath inDirectory:(NSString *)directoryPath {
    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileIndexPath]];

    [data writeToFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, extension] atomically:YES];
}

Чек

-(BOOL) checkIfFileExists:(NSString *)fileName ofType:(NSString *)extension inDirectoryPath:(NSString *)directoryPath {
    bool result;

    if ([[NSFileManager defaultManager] fileExistsAtPath:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", fileName, extension]]]) {
        result = TRUE;
    } else {
        result = FALSE;
    }

    return result;
}

Установить

UIButton * button = [[UIButton alloc] init];
UIImage * backgroundImage = [self loadImage:@"YourImageName" ofType:@"png" inDirectory:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]];

[button setImage:backgroundImage forState:UIControlStateNormal];

-Edited-

Я считаю, что ваша проблема в том, что вы возвращаете 0 в вашем loadImages методе. Вместо того, чтобы возвращать само изображение.

Вот как я это сделал:

Load

-(UIImage *) loadImage:(NSString *)fileName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {

    UIImage * result = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, extension]];

    return result;
}
1 голос
/ 31 марта 2012
[UIImage imageNamed:@"i224_mag2.png"]; // it is only for bundle. You should use 

[UIImage imageWithContentsOfFile:path] 

или

 [UIImage imageWithData:data];

Обновление:

Я использую категорию для класса UIButton.

- (void)loadImage:(NSString *)URL withActivityIndicator:(BOOL)hasActivity refreshObject:(UIView *)refresh{

   // load image from cache cutted   
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//this will start the image loading in bg
dispatch_async(concurrentQueue, ^{  

    NSData *image = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:URL]];

    //this will set the image when loading is finished
    dispatch_async(dispatch_get_main_queue(), ^{
        UIImage *loadedImage = [UIImage imageWithData:image];

 // add image to cache cutted

        [self setImage:loadedImage forState:UIControlStateNormal];

    });
});

}

0 голосов
/ 01 апреля 2012

Вы создаете NSData, используя dataWithContentsOfFile: API. вы должны использовать dataWithContentsOfURL вместо этого.

    NSString *urlMag1 = [NSString stringWithFormat:@"http://myweb.com/i224_mag1.png"];
    NSString *urlMag2 = [NSString stringWithFormat:@"http://myweb.com/i224_mag2.png"];


    NSData *image1 = [NSdata contentsOfURL:[NSURL URLWithString:urlMag1]];

    NSData *image2 = [NSdata contentsOfURL:[NSURL URLWithString:urlMag2]];


    [mag2 setBackgroundImage:imgMag1 forState:UIControlStateNormal];

Обычно [NSdata contentsOfURL:[NSURL URLWithString:urlMag1]]; останавливает интерфейс до завершения загрузки изображения.

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