2013-04-04 3 views
1

Я создал 2 класс (RecipeViewController & DetailViewController) RecipeView является TableViewController, что показать мне 4 ячейки (название книги) и DetailView является UIViewController, что имеет UIScroll, которые показывают мне много изображений любой книги.не отображаются изображения в UIScrollView

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

это мой код:

RecipeViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    int x = (indexPath.row)+1; 
    NSLog(@"x : %d",x); 
    DetailViewController *obj = [[DetailViewController alloc]init]; 
    obj.yourValue = [NSString stringWithFormat:@"%d",(indexPath.row)+1]; 
    [self presentModalViewController:obj animated:YES]; 
    NSLog(@"yourValue1 : %@",obj.yourValue); 
} 

DetailViewController.m

#import "DetailViewController.h" 
#import "RecipeViewController.h" 


@implementation DetailViewController 
@synthesize scroller,yourValue; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //m1 variable tell me in tableview which choice book 
    int m1 = [self.yourValue integerValue]; 

    NSLog(@"m1 : %d",m1); 

    //this code give me number of images (pages of book) 
    NSString *numberbook = [[NSString alloc]initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.1.102/mamal/book.php?info=0&b=%d",m1]]]; 

    NSInteger numbook = [numberbook integerValue]; 

    NSLog(@"%d",numbook); 

    for (int i = 1; i <= numbook; i++) 
    { 
     //this code for recive images from specific book 
     NSData *dat = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.1.102/mamal/book.php?p=%d&b=%d",i,m1]]]; 
     NSLog(@"%@",dat); 

     UIImageView *imagen = [[UIImageView alloc] initWithImage:[UIImage imageWithData:dat]]; 

     imagen.frame = CGRectMake((i-1)*320, 0, 320, 460); 

     [scroller addSubview:imagen]; 
    } 
    scroller.delegate = self; 
    scroller.contentSize = CGSizeMake(320*numbook, 460); 
    scroller.pagingEnabled = YES; 

} 

@end 

Извините за мой слабый английский !!!

+0

что это такое NSInteger numbook = [numberbook integerValue] ;? – Balu

+0

Двойная проверка, если '[UIImage imageWithData: dat]' не ноль? – yeesterbunny

+0

Каково значение numbook? – Balu

ответ

0

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

https://github.com/nicklockwood/AsyncImageView

это очень хорошая категория UIImageView, вы просто должны импортировать AsyncImageView и может использовать функцию

[imageView setImageURL:@"ur url"]; 

он загружает все изображения асинхронно, и имеет так много настроек.

В вашем случае:

for (int i = 1; i <= numbook; i++) 
{ 
UIImageView *imagen = [[UIImageView alloc] initWithFrame: CGRectMake((i-1)*320, 0, 320, 460)]; 
[imagen setImageURL: [NSString stringWithFormat:@"192.168.1.102/mamal/book.php?p=%d&b=%d",i,m1]]]; 
[scroller addSubview:imagen]; 
} 

Вы делаете все, что в основном потоке, поэтому она не загружается изображения. В том же коде, который вы делаете, попробуйте дать фоновый цвет imageView и проверить.

+0

мой друг У меня много url, и моя проблема не показывает мне UIScrollerView много изображений – 2013-04-04 08:15:55

+0

Я отредактировал свой ответ. – satheeshwaran

+0

Просьба принять ответ и ответить на мой ответ, если он прав. – satheeshwaran

0

Если вы действительно хотите использовать [NSData dataWithContentsOfURL:]; Добавьте это в свой цикл, chnage url и frameView.

for (int i = 1; i <= numbook; i++) 
{ 
    UIImageView *yourImage=[[UIImageView alloc]init]; 
    yourImage.frame = CGRectMake((i-1)*320, 0, 320, 460); 
    [scroller addSubview:imagen]; 

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 

    dispatch_async(queue, ^{ 


     NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.1.102/mamal/book.php?p=%d&b=%d",i,m1]]; 

     NSData *imgData = [NSData dataWithContentsOfURL:url]; 

     dispatch_sync(dispatch_get_main_queue(), ^{ 

      UIImage *downloadedImage = [UIImage imageWithData:imgData]; 

      yourImage.image = downloadedImage; 
      if(yourImage.image==nil) 
      { 
       [yourImage setImage:@"placeholder.png"]; 

      } 
     }); 
    }); 

} 
+0

извините, мой друг У меня есть один вопрос: я хочу изменить url и показать в UIScroller изображение для этого я могу использовать для loop.above код можно разместить в цикле? – 2013-04-04 09:08:19

+0

, конечно, вы можете поместить его в цикл, подождите, позвольте мне отредактировать его за ya .. – satheeshwaran

+0

мой друг Я использую раскадровку и в нее кладу 2 страницы UITableView и UIView, что UIView на собственной полной странице имеет UISCrollerView. право использовать UISCroll – 2013-04-04 09:36:05

Смежные вопросы