【发布时间】:2012-07-24 08:39:16
【问题描述】:
我目前正在动态地将 UIImage 添加到我的 UIScrollView 对象中,并且一切都按预期工作。我现在需要添加额外的功能(从互联网加载时图像中心的 UIActivityIndicator 和下方的标签)所以我想为什么不创建一个自定义视图,其中包含我需要的所有这些布局是,然后将其加载到滚动视图中。但是我遇到了一个问题,当我将它添加到滚动视图时,什么也没有出现。这是我所拥有的:
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 文件的屏幕截图,以及在模拟器上运行的程序。第一张图片在滚动视图中没有显示任何内容(使用我的自定义类进行的尝试),滚动视图的第二页是通过将 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
【问题讨论】:
-
您是否在身份检查器中正确引用了此自定义视图?
-
是的,在我的屏幕截图中,它显示 Custom 类应该是 CustomImageView。你指的是这个吗?
-
是的 - 抱歉我没有检查你的截图
-
请分享您的 CustomImageView 类的一些相关代码。原则上,您的自定义图像视图可能定位正确且可见,但其子视图和属性 activityIndicator、标题和 imageView 不存在。
-
CustomImageView类的.m文件中除了我合成属性外没有任何代码。我在 IB 的屏幕截图中包含了视图层次结构。
标签: iphone objective-c ios uiscrollview uiimageview