点击图片的显示大图

这是第二界面的大图效果

思路:首先新建一个第二界面的控制器,我是用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,是不会重新计算高度的!