电影项目 (三)

一.创建海报视图 :

- (void)_createPosterView{

//    _posterView = [[UIView alloc] initWithFrame:self.view.bounds];
//    _posterView.backgroundColor = [UIColor orangeColor];
//    _posterView.hidden = NO;
//
//    [self.view addSubview:_posterView];

    //布局对象
    UICollectionViewFlowLayout *flowLayout =
    [[UICollectionViewFlowLayout alloc] init];

    //布局信息
    flowLayout.itemSize = CGSizeMake(kScreenWidth, kScreenHeight - kNavigationBarHeight -
                                     kTabBarHeight);

    //flowLayout.minimumInteritemSpacing = 0;
    flowLayout.minimumLineSpacing = 30;

    flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;

    _posterView = [[UICollectionView alloc]
                   initWithFrame:CGRectMake(0, 0, kScreenWidth,
                                            kScreenHeight - kNavigationBarHeight -
                                            kTabBarHeight)
                   collectionViewLayout:flowLayout];

    _posterView.dataSource = self;
    _posterView.delegate = self;

    //分页效果
    _posterView.pagingEnabled = YES;

    _posterView.indicatorStyle = UIScrollViewIndicatorStyleWhite;

    [self.view addSubview:_posterView];

    //注册单元格
    [_posterView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CollectionView_Cell"];

    [self.view addSubview:_posterView];

}

二.代码优化:

子类化PostView:

//
//  PosterView.m
//  Movie 2.0
//
//  Created by mac1 on 15/10/11.
//  Copyright (c) 2015年 www.iphonetrain.com. All rights reserved.
//

#import "PosterView.h"

#import "LargeCell.h"

#import "Common.h"

#import "MovieModel.h"

#import "UIImageView+WebCache.h"

@implementation PosterView

#define kLargeCollectionViewCellID @"kLargeCollectionViewCellID"
#define kMovieHeaderViewHeight 50
#define kMovieFooterViewHeight 40

- (instancetype)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];

    if (self != nil) {
        [self _createLargeCollectionView];
    }

    return self;
}

- (void)_createLargeCollectionView{

    //布局对象
    UICollectionViewFlowLayout *flowLayout =
    [[UICollectionViewFlowLayout alloc] init];

    //布局信息
    flowLayout.itemSize =
    CGSizeMake(kScreenWidth * 0.75,
               kScreenHeight - kNavigationBarHeight - kTabBarHeight -
               kMovieHeaderViewHeight - kMovieFooterViewHeight);
    //上下分别留出来其他两个部分的位置,
    //减去距离CollectionView顶部和底部空余的空间

    // flowLayout.minimumInteritemSpacing = 0;
    flowLayout.minimumLineSpacing = 0;

    flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;

    CGRect largeFrame = CGRectMake(
                                   0, kMovieHeaderViewHeight, kScreenWidth,
                                   kScreenHeight - kNavigationBarHeight - kTabBarHeight -
                                   kMovieHeaderViewHeight -
                                   kMovieFooterViewHeight); /*上下分别留出来其他两个部分的位置*/

    _largeCollectionView = [[UICollectionView alloc] initWithFrame:largeFrame
                                              collectionViewLayout:flowLayout];

    _largeCollectionView.dataSource = self;
    _largeCollectionView.delegate = self;

    //分页效果
    _largeCollectionView.pagingEnabled = YES;

    _largeCollectionView.indicatorStyle = UIScrollViewIndicatorStyleWhite;

    [self addSubview:_largeCollectionView];

    //注册单元格
    [_largeCollectionView registerClass:[LargeCell class]
             forCellWithReuseIdentifier:kLargeCollectionViewCellID];

}

#pragma mark - CollectionView数据源代理

//组数- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {    return 1;}

//单元格的个数- (NSInteger)collectionView:(UICollectionView *)collectionView     numberOfItemsInSection:(NSInteger)section {    return self.data.count;}

//创建单元格- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView                  cellForItemAtIndexPath:(NSIndexPath *)indexPath {    LargeCell *cell = [collectionView                       dequeueReusableCellWithReuseIdentifier:kLargeCollectionViewCellID                       forIndexPath:indexPath];        // cell.transform = CGAffineTransformMakeScale(0.5, 0.5);        //电影数据传递给单元格显示    MovieModel *model = self.data[indexPath.item];    cell.model = model;        //  //取到图片URL地址    //  MovieModel *model = self.data[indexPath.item];    //  NSString *imageStr = [model.images objectForKey:@"large"];    //  NSURL *imageUrl = [NSURL URLWithString:imageStr];    //    //  //创建ImageView显示图片    //  UIImageView *imageView = [[UIImageView alloc] initWithFrame:cell.bounds];    //  [imageView sd_setImageWithURL:imageUrl];    //    //  //imageView添加到单元格上    //  [cell.contentView addSubview:imageView];        return cell;}

//设置每一组的偏移量(上左下右四个方向)- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView                        layout:(UICollectionViewLayout *)collectionViewLayout        insetForSectionAtIndex:(NSInteger)section {    return UIEdgeInsetsMake(0, (kScreenWidth - kScreenWidth * 0.75) / 2, 0,                            0); //(屏幕宽度 - 单元格宽度) / 2}

@end

控制器调用创建PostView :

//创建海报视图
- (void)_createPosterView{

//    _posterView = [[UIView alloc] initWithFrame:self.view.bounds];
//    _posterView.backgroundColor = [UIColor orangeColor];
//    _posterView.hidden = NO;
//
//    [self.view addSubview:_posterView];

    _posterView = [[PosterView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth,
                                                               kScreenHeight - kNavigationBarHeight -
                                                               kTabBarHeight)];
    _posterView.backgroundColor = [UIColor orangeColor];
    _posterView.hidden = NO;

    //把数据从控制器传递给海报视图
    _posterView.data = self.movieData;

    [self.view addSubview:_posterView];

}

三.给PostView赋数据,子类化collectionCell:

//
//  LargeCell.h
//  Movie 2.0
//
//  Created by mac1 on 15/10/11.
//  Copyright (c) 2015年 www.iphonetrain.com. All rights reserved.
//

#import <UIKit/UIKit.h>

//大海报CollectionView单元格
@class MovieModel;

@interface LargeCell : UICollectionViewCell {
    UIImageView *_imageView;  //电影海报
}

@property (nonatomic, strong) MovieModel *model;  //一条电影数据

@end
//
//  LargeCell.m
//  Movie 2.0
//
//  Created by mac1 on 15/10/11.
//  Copyright (c) 2015年 www.iphonetrain.com. All rights reserved.
//

#import "LargeCell.h"

#import "UIViewExt.h"

#import "UIImageView+WebCache.h"

#import "MovieModel.h"

@implementation LargeCell

/*
当单元格是从xib文件加载,此方法会被调用
- (void)awakeFromNib{

}

 */

//创建单元格调用此方法:
- (id)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {

        //创建子视图
        [self _createSubviews];
    }

    return self;

}

- (void)_createSubviews {

    //单元格的宽高 * 0.8 = 图片的大小
    CGFloat width = self.width * 0.8;
    CGFloat height = self.height * 0.8;

    //创建imageView
    _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
    _imageView.center = self.contentView.center;

    [self.contentView addSubview:_imageView];
}

//给子视图填充数据

- (void)setModel:(MovieModel *)model{

    _model = model;

    NSString *imageStr = [model.images objectForKey:@"large"];
    NSURL *imageURL = [NSURL URLWithString:imageStr];

    [_imageView sd_setImageWithURL:imageURL];

}

@end

实现的效果如下 :

时间: 2024-10-13 08:55:02

电影项目 (三)的相关文章

android 实践项目三

android 实践项目三 本周我主要完成的任务是将代码进行整合,然后实现百度地图的定位与搜索功能.在这次实现的 图形界面如下: 在本周的工作中主要的实现出来定位与收索的功能,在地图中能实现了定位,显示当前的位置, 不知到为什么不显示地图,经过查找资料可能因为当前的SDK本版太高了,不匹配.所以在下周 图像的显示问题.下面是我的主要贴上我的布局代码 地图的布局: 本周的总结 做项目是学习知识最快的方式,即能让我们碰见各种问题,也让我们去解决各种问题.在项目中感觉自己 的水平有限,还需要更加努力的

综合项目三

综合项目三 项目背景: 我院107实验室是网络综合实验室,现有计算机若干台,使用一台二层交换机连接各台电脑.实验室出口是一块三层交换机,与1号楼的出口路由器相连.平时在实验室内,教师和学生能够相互通信.现发现部分同学实验课上偷偷上网.现在要求:实验课上老师和同学们能够通信,教师可以上网,同学们可以发送邮件等,不能访问www服务.假如你是107实验室管理员,请你完整以上要求. 计算机名 Ip 网关 掩码 Vlan SB F0/2 192.168.30.1/24 R1 F0/0 192.168.30

十一周 项目三 点类

#include<iostream> #include<Cmath> using namespace std; class Point //定义坐标点类 { public: Point():x(0),y(0) {}; Point(double x0, double y0):x(x0),y(y0){}; void PrintPoint(); //输出点的信息 double getx() { return x; } double gety() { return y; } protect

tomcat部署项目三种方法

1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法. 2.在tomcat安装目录中有一个conf文件夹,打开此文件夹,其中包含配置文件server.xml,打开配置文件,并在<host>和</host>之间插入如下语句. <Context    path="/hello"   docBase="F:\eclipse3.2\workspace\hello\WebRoot

个人项目三

五子棋 题目简介: 五子棋是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜.棋具与围棋通用,起源于中国上古时代的传统黑白棋种之一.主要流行于华人和汉字文化圈的国家以及欧美一些地区.容易上手,老少皆宜,而且趣味横生,引人入胜:不仅能增强思维能力,提高提高智力,而且富含哲理,有助于修身养性.已在各个游戏平台有应用. 结对分工: 宋德彪:写实验报告 程普楠:找代码,测试 https://github.com/xiaoliulang02

MVC4商城项目三:分部视图在导航条上的应用

写了几天发觉大部分时间用在JS上了,本来想写个musicstore,却加了框架,然后又想用后台,然后又想用上bootstrapt,然后又想弄权限设计,然后又想………… 看来是想多了~ 好吧,最近把后台搭起来了,用了metronic.bootstrap, 真心很强大.功能很多,为了节约时间成本就在它上面改吧.先上图看看 框架演示地址:http://dreamsky.github.io/main/blog/metronic-bootstrap/index.html 下载地址:http://dream

使用IntelliJ Idea创建Maven项目(三)

使用IntelliJ Idea创建Maven项目(三) 原文地址:https://www.cnblogs.com/yankai1101/p/8469307.html

crm 系统项目(三) 自动分页

crm 系统项目(三) 自动分页 需求: 1. 做一个自动分页, 每15条数据1页 2. 让当前页数在中间显示 3. 上一页, 下一页 注意情况: 1.总页数 小于 规定显示的页数 2. 左右两边极值情况 3. 前后端传参,交互 user_list.py {% extends 'layout.html' %} {% block content %} <table class="table table-bordered table-hover"> <thead>

项目三. 基于图像压缩的视频监控系统

项目三. 基于图像压缩的视频监控系统 Sprint0-产品设计与规划 基于图像压缩的视频监控系统 1. 产品功能演示 在linux系统上运行程序,弹出登录界面,输入地址.端口信息,弹出视频监控界面,实时传出视频信息. 2. 功能模块分析 采集端: 图像采集子系统 图像编码子系统 传输子系统 主程序 监控端: 传输子系统 图像编码子系统 传输子系统 主程序 Sprint1-基于Epoll架构的采集端程序框架设计 第1课-Epoll机制精通 大纲: v  为什么用Epoll? 阻塞型IO与多路复用