Ole*_*leg 7 iphone cocoa-touch objective-c uiview ios
我有UITableViewController与UIScrollView内UIView作为它的头.
UIScrollView用于显示图像的幻灯片:
UITableView
-UITableViewHeaderView
-UIView
-UIScrollView
-UIImageView
...
-UIPageControl
Run Code Online (Sandbox Code Playgroud)
每个图像都有一个带有标题和描述的子视图:
UIImageView
-UIView
-UILabel
-UILabel
Run Code Online (Sandbox Code Playgroud)
当我需要更新我的tableView一个委托方法被调用,它重新加载a tableView和调用addImages方法中的数据:
- (void)eventsUpdated
{
if ([self respondsToSelector:@selector(setRefreshControl:)])
[self.refreshControl endRefreshing];
[self.tableView reloadData];
[self addImages];
}
Run Code Online (Sandbox Code Playgroud)
以下是我添加图片的方式:
- (void)addImages
[self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
for (int i = 0; i < images.count; i++) {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * i;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
UIImageView *subview = [self createImageViewForEvent:[images objectAtIndex:i] inFrame:frame];
subview.frame = frame;
[self.scrollView addSubview:subview];
}
self.scrollView.contentSize = CGSizeMake(scrollView.frame.size.width*images.count, scrollView.frame.size.height);
pageControll.currentPage = 0;
pageControll.numberOfPages = images.count;
}
- (UIImageView *)createImageViewForEvent:(Event *)event inFrame:(CGRect)frame
{
UIImage *image;
NSString *imageName = [event.imageName lastPathComponent];
NSString *bundleFilePath = [[NSBundle mainBundle] pathForResource:[imageName stringByDeletingPathExtension] ofType:[imageName pathExtension]];
image = [UIImage imageWithContentsOfFile:bundleFilePath];
UIImageView *output = [[UIImageView alloc] initWithImage:image];
output.frame = frame;
UIView *descriptionView = [[UIView alloc] initWithFrame:CGRectMake(0, frame.size.height*0.7, frame.size.width, frame.size.height*0.3)];
descriptionView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
descriptionView.alpha = 1.0;
UILabel *header = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, frame.size.width-20, 12)];
header.textColor = [UIColor colorWithRed:210/256.0 green:217/256.0 blue:231/256.0 alpha:1.0];
header.font = [UIFont fontWithName:@"Helvetica" size:17];
header.backgroundColor = [UIColor clearColor];
header.lineBreakMode = UILineBreakModeTailTruncation;
header.numberOfLines = 1;
UILabel *description = [[UILabel alloc] initWithFrame:CGRectMake(10, 22, frame.size.width-20, 28)];
description.textColor = [UIColor colorWithRed:255/256.0 green:255/256.0 blue:255/256.0 alpha:1.0];
description.font = [UIFont fontWithName:@"Helvetica" size:12];
description.backgroundColor = [UIColor clearColor];
description.lineBreakMode = UILineBreakModeTailTruncation;
description.numberOfLines = 2;
header.text = event.title;
[descriptionView addSubview:header];
description.text = event.shortDesription;
[descriptionView addSubview:description];
[output addSubview:descriptionView];
return output;
}
Run Code Online (Sandbox Code Playgroud)
首次启动后一切正常,但如果我尝试重新加载tableView并addImages再次调用,所有UILabel都会消失,只有UIImageView并且UIView可见.
UPD:
我注意到的是,我的UILabel在一段时间后出现,大约在30秒后出现.我以前从未经历过类似的事情
UPD 2:
我重装我之后tableView和scrollview,scrollView's内容未更新,马上,只有后,我开始滚动
我从您发布的代码中复制了一个示例项目,并且没有在标签或任何其他组件上发现任何令人耳目一新的问题.这让我认为问题不在你发布的代码中,而是在其他地方.
通常当你看到这样的延迟时,是因为一些不应该并行运行的代码并行运行.
我建议你查看你打电话的方式和时间eventsUpdated.您必须确保在主线程上执行调用,并且只有在您的事件数组完成更新后才会执行.要检查,您可以添加以下行eventsUpdated:
NSLog(@"Current: %@, main: %@", [NSThread currentThread], [NSThread mainThread]);
请发布日志!:-)
我建议你也在你的问题中添加调用方法的代码eventsUpdated,因为它也可能有所帮助.
| 归档时间: |
|
| 查看次数: |
4031 次 |
| 最近记录: |