点击图片的显示大图
这是第二界面的大图效果
思路:首先新建一个第二界面的控制器,我是用XIB直接拉的控件
首先在图片加载界面设置一个临时的image来备用,下面代码中红色的部分,_nextShowImage就是用来临时使用的,在跳转页面的时候将这个值直接赋值过去,就不用在大图页面再一次加载了,虽然说SD会有缓存,但代码量也少不了,所以我采用了这种传值方式
//设置图片 [self.imageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:nil options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { //注意要写个1.0,刚开始没写1.0,/出来是整数,我说怎么进度条直接0到1了 CGFloat progress = 1.0 * receivedSize / expectedSize; self.bgImage.hidden = NO; self.ProgressView.hidden = NO; self.ProgressView.progressLabel.textColor = [UIColor whiteColor]; self.ProgressView.roundedCorners = 3; self.ProgressView.progressLabel.text = [NSString stringWithFormat:@"%.0f%%",progress*100]; [self.ProgressView setProgress:progress animated:YES]; } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { //存着,待会传到下个界面展示 _nextShowImage = image; self.bgImage.hidden = YES; self.ProgressView.hidden = YES; //判断是否为gif来隐藏git小图标 self.gifImage.hidden = [self.talkModel.type isEqualToString:@"image"]; //判断是否显示“点击查看全图” if (talkModel.isBigPicture) {//大图 self.bigImageOutlet.hidden = NO; }else{//非大图 self.bigImageOutlet.hidden = YES; } }];
保存成功和失败时使用提示框的时候发现时间太长,我用的是SVProgressHUD,于是手动修改了一下,改成了显示1秒,默认的好像是0.5-5秒,修改的是这个函数,直接ruturn 1就行了。
+ (NSTimeInterval)displayDurationForString:(NSString*)string { return 1; }
下午
开始写点击评论的第二界面,思路也是XIB画框架,然后传model进去显示,思路比较简单,但是有几点要注意!
- 由于第一界面的cell内容照样也要显示到第二界面上,如果和第一界面一样,用model加载,然后算cell高度,但是由于数据源不同,操作起来比较麻烦(其实也就只是加个判断😄),所以我直接将第一界面的cell放到第二界面的headerView上,但由于headerView要View显示,所以将cell加到一个新View上即可,代码如下
//设置tv头部,用于显示上页的cell - (void)setTabViewHeader { //由于头部视图是个view,所以将cell放到view再放到头部视图 UIView *cellHeader = [[UIView alloc] init]; //注意,这里需要判断一下,由于点到了详细界面,热评是会取消掉的,就不能将热评加入到cell,需要重新设置一下 if (_talkModel.top_comment) { _talkModel.top_comment = nil; //注意,这里一定要将cellHeight的值设置为0,好让cellHeight重新计算一次cell的高度 [_talkModel setValue:@0 forKey:@"cellHeight"]; } myContentCell *cell = [myContentCell myComtentCell]; //这里的宽度是cell宽度,是要放满屏幕的,不需要写-20 cell.size = CGSizeMake(Main_Screen_Width , self.talkModel.cellHeight); cell.talkModel = self.talkModel; [cellHeader addSubview:cell];
cellHeader.height = self.talkModel.cellHeight;
//加入到头部视图 self.myTableView.tableHeaderView = cellHeader; }
- 上面的代码需要注意的地方是判断有无热评,因为点到第二界面去之后,热评是会消失的,是不能显示的,所以这里需要加个判断是否有热评,如果有热评,就将热评model = nil,在cell加载里就会将热评View给Hidden掉。
- 还有个注意点,就是setValue,不仅要讲热评model=nil,还需要将cellHeight的值设置为0,之所以这样做,是因为设置为0以后,好让cell重新计算高度,因为将热评hidden掉了,就要把热评的高度给减掉,如果不设置为0,是不会重新计算高度的!