0

次のコードは、うまく動作するUIScrollViewです。しかし、画像を読み込むときは、最後のサブビューでのみ見ることができ、UIActivityIndi​​catorViewは各画像の読み込みには使用できません。UIImageViewをURLからUIScrollViewへUIIctageIndicatorViewを使って各UIImageViewにロードする

このような作業を行う方法は?

myProject2ViewController.h

#import <UIKit/UIKit.h> 
#import "PageScrollView.h" 

@interface myProject2ViewController : UIViewController 
{ 
    NSMutableArray *pages; 
    PageScrollView *scrollView; 
    UIView *myOneSubview; 
    UIImageView *imageView; 
    UIActivityIndicatorView *myIndicator; 
} 

@property (nonatomic, retain) PageScrollView *scrollView; 
@property (nonatomic, retain) UIImageView *imageView; 
@property (nonatomic, retain) UIActivityIndicatorView *myIndicator; 

@end 

myProject2ViewController.m

#import "myProject2ViewController.h" 

@implementation myProject2ViewController 

@synthesize scrollView; 
@synthesize imageView; 
@synthesize myIndicator; 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSArray *imageUrls = [NSArray arrayWithObjects: 
          @"link_1", 
          @"link_2", 
          @"link_3", 
          nil]; 

    pages = [[NSMutableArray alloc] init]; 

    for (int i = 0; i < [imageUrls count]; i++) { 

     CGRect frameOne = CGRectMake(0.0f, 50.0f, 320.0f, 416.0f); 
     myOneSubview = [[UIView alloc] initWithFrame:frameOne]; 
     myOneSubview.backgroundColor = [UIColor blackColor]; 

     NSString *imageUrl = [imageUrls objectAtIndex:i]; 

     myIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
     myIndicator.center = CGPointMake(160.0f, 130.0f); 
     myIndicator.hidesWhenStopped = YES; 
     myIndicator.backgroundColor = [UIColor clearColor]; 

     imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 50.0f, 320.0f, 416.0f)]; 

     [NSThread detachNewThreadSelector:@selector(loadImages:) toTarget:self withObject:imageUrl]; 

     [myOneSubview addSubview:imageView]; 

     [pages addObject:myOneSubview]; 
    } 

    scrollView = [[PageScrollView alloc] initWithFrame:self.view.frame]; 
    scrollView.pages = pages; 
    scrollView.delegate = self; 
    self.view = scrollView; 
} 

- (void)loadImages:(NSString *)string 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    [myIndicator startAnimating]; 

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 


    NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:string]]; 
    UIImage *image = [[UIImage alloc] initWithData:imageData]; 
    [imageView setImage:image]; 

    [image release]; 
    [imageData release]; 

    [self performSelectorOnMainThread:@selector(loadImageComplete) withObject:self waitUntilDone:YES]; 

    [pool drain]; 
} 

-(void)loadImageComplete 
{ 
    NSLog(@"Load image complete!"); 
    [myIndicator stopAnimating]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
} 

@end 

答えて

0

あなたが行うと:あなたのforループ内

CGRectMake(0.0f, 50.0f, 320.0f, 416.0f); 

を、あなたは同じものを指定しています正確なポーforループで作成したすべてのイメージの次元と次元。言い換えれば、作成する次のイメージはすべて前のイメージの上に置かれます。その結果、forループで作成した最終イメージのみが表示されます。

CGRectMake()のXとYの値にカウンター "i"変数を追加して、次に作成されるすべてのイメージをオフセットしてみてください。各画像は100ピクセル幅であるので、右の前の1(後に座って、我々はによってそれを相殺

CGRectMake(0.0f + (i * 100.0f), 50.0f, 320.0f, 416.0f); 

各画像になるだろう:

それではようなものは、各画像は100ピクセル100ピクセルだったとしましょう100ピクセルであり、その値を次の画像の開始点として使用する)。 (i * 100)の後に余分な値を加えて(i * 100 + 50)にすると、前の画像から50ピクセルの左パディングが得られます。

画像が異なる場合は、画像の幅と高さを計算してからCGRectMake()メソッドに入力する必要があります。

希望に役立ちます。

加えて、代わりにあなたのスクロールビューに追加するので、多くのビューを作成する、あなたはそうのようなコードを書くことができます。

scrollView = [[UIScrollview alloc] init]; 

. . . 

for(...) 
{ 
    UIImageView *currentImage = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f + (i * 100.0f), 50.0f, 320.0f, 416.0f); 
    [currentImage setImage:[UIImage imageNamed:[imageUrls objectAtIndex:i]]]; 

    . . . 

    [scrollView addSubview: currentImage]; 
    [currentImage release]; 
} 
+0

は、ご返信いただきありがとうございます。しかし、ScrollViewは正常に動作します。これは別のクラス(#import "PageScrollView.h" 。)によって定義されます。このクラスは "ページ"の配列からワーカーScrollViewを作成します。 – scazy0rg

関連する問題