現在、UIScrollView オブジェクトに UIImage を動的に追加していますが、すべてが意図したとおりに機能しています。今すぐ追加機能を追加する必要があります (インターネットからロードするときに画像の中央にある UIActivityIndicator とその下のラベル) ので、必要に応じてこれらすべてを配置したカスタム ビューを作成しない理由を考えました。それをscrollViewにロードするだけです。問題が発生しましたが、scrollView に追加しても何も表示されません。これが私が持っているものです:
NewsViewController.m:
imageScrollView.contentSize = CGSizeMake(320*numberOfPages, 303);
pageControl.numberOfPages = numberOfPages;
dispatch_queue_t imageDownload = dispatch_queue_create("imageDownload", NULL);
__block NSData *temp;
CustomImageView *customImageView = [[CustomImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 303)];
[imageScrollView addSubview:customImageView];
[[customImageView activityIndicator] startAnimating];
dispatch_async(imageDownload, ^{
temp = [[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.wlfarm.org/wp-content/uploads/2012/05/farm.jpg"]]retain];
dispatch_async(dispatch_get_main_queue(), ^{
customImageView.imageView.image = [[UIImage alloc] initWithData:temp];
[[customImageView activityIndicator] stopAnimating];
[customImageView setNeedsDisplay];
customImageView.caption.text = @"HAHAHAHAHHAHA";
[imageScrollView setNeedsDisplay];
[temp release];
});
});
dispatch_release(imageDownload);
CustomImageView.h:
#import <UIKit/UIKit.h>
@interface CustomImageView : UIView
{
IBOutlet UIImageView *imageView;
IBOutlet UILabel *caption;
IBOutlet UIActivityIndicatorView *activityIndicator;
}
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@property (nonatomic, retain) IBOutlet UILabel *caption;
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *activityIndicator;
@end
CustomImageView.m
#import "CustomImageView.h"
@interface CustomImageView ()
@end
@implementation CustomImageView
@synthesize caption, imageView, activityIndicator;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
XIB ファイルのスクリーンショットと、シミュレーターで実行されているプログラムを含めています。最初の画像は scrollView に何も表示されません (私のカスタム クラスを使用して行われた試行)。スクロール ビューの 2 番目のページは、UIImageView を UIScrollView に追加することによって行われた試行です (機能しました)。誰かが私が間違っていることを指摘できますか? カスタム ビューを UIScrollView に読み込むことはできませんか? ご協力いただきありがとうございます!
IB スクリーンショット - http://i.stack.imgur.com/gz9UL.png
iOS シミュレータ CustomView スクリーンショットの画像なし - http://i.stack.imgur.com/zhswq.png
UIImageView スクリーンショットを含む iOS シミュレーター イメージ - http://i.stack.imgur.com/97vmU.png