做了这个小demo 之后  感觉OC 和swift 还是有很大的差别的 自己还是要去多看些swift的语法 用的不是很熟练

1.这个demo 的资源文件 我都是用原工程的

2.同样的自定义cell 的时候 用的是“SnapKit”这个库

3.其实这一个demo的主要就是自定义cell,思想和OC 是一样的 总感觉swift写的是那么的别扭,可能还是不熟悉语法吧,还是要多看多练

效果

代码 自定义cell 的代码

import UIKit
import SnapKit struct video {
let image: String
let title: String
let source: String } class VideoViewCell: UITableViewCell {
public var titleLabel:UILabel?
public var picImageView:UIImageView?
public var startImageView:UIImageView? override func awakeFromNib() {
super.awakeFromNib() } required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
} override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier);
self.setUpUI()
} func setUpUI() { self.picImageView = UIImageView.init()
self.addSubview(self.picImageView!) self.startImageView = UIImageView.init()
startImageView?.image = UIImage.init(named: "playBtn")
self.addSubview(self.startImageView!) self.titleLabel = UILabel.init()
self.titleLabel?.textColor = UIColor.white;
self.titleLabel?.textAlignment = .center
self.addSubview(self.titleLabel!) self.picImageView?.snp.makeConstraints { (make) in
make.top.equalTo(self).offset()
make.left.equalTo(self).offset()
make.width.equalTo(SCREEN_WIDTH)
make.height.equalTo(self)
} self.startImageView?.snp.makeConstraints({ (make) in
make.center.equalTo(self.snp.center)
make.width.equalTo()
make.height.equalTo()
}) self.titleLabel?.snp.makeConstraints({ (make) in
make.top.equalTo((self.startImageView?.snp.bottom)!).offset()
make.width.equalTo(SCREEN_WIDTH)
make.height.equalTo()
}) } override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated) // Configure the view for the selected state
} }

控制器的代码

import UIKit
import AVKit
import AVFoundation let SCREEN_WIDTH = UIScreen.main.bounds.size.width
let SCREEN_HEIGHT = UIScreen.main.bounds.size.height class ViewController : UIViewController, UITableViewDataSource,UITableViewDelegate { lazy var tableView = UITableView()
let array:Array<Any> = []
var data = [ video(image: "videoScreenshot01", title: "Introduce 3DS Mario", source: "Youtube - 06:32"),
video(image: "videoScreenshot02", title: "Emoji Among Us", source: "Vimeo - 3:34"),
video(image: "videoScreenshot03", title: "Seals Documentary", source: "Vine - 00:06"),
video(image: "videoScreenshot04", title: "Adventure Time", source: "Youtube - 02:39"),
video(image: "videoScreenshot05", title: "Facebook HQ", source: "Facebook - 10:20"),
video(image: "videoScreenshot06", title: "Lijiang Lugu Lake", source: "Allen - 20:30") ] override func viewDidLoad() {
super.viewDidLoad()
self.tableView = UITableView(frame: CGRect(x: , y: , width: SCREEN_WIDTH, height: SCREEN_HEIGHT), style: .plain)
self.tableView.dataSource = self
self.tableView.delegate = self
self.tableView.rowHeight = ;
self.view.addSubview(tableView) } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
} func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let customeIdntifier = "videoCell"
var cell = tableView.dequeueReusableCell(withIdentifier: customeIdntifier) as? VideoViewCell if cell == nil {
cell = VideoViewCell.init(style: UITableViewCellStyle.default, reuseIdentifier: customeIdntifier)
} let video = data[indexPath.row]
cell?.titleLabel?.text = video.title
cell?.picImageView?.image = UIImage.init(named: video.image)
return cell!
} func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let playViewContoller = AVPlayerViewController()
var playerView = AVPlayer() let path = Bundle.main.path(forResource: "emoji zone", ofType: "mp4") playerView = AVPlayer(url: URL(fileURLWithPath: path!)) playViewContoller.player = playerView self.present(playViewContoller, animated: true) {
playViewContoller.player?.play()
} } override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
} }

自学 iOS - 三十天三十个 Swift 项目 第三天的更多相关文章

  1. 自学 iOS – 三十天三十个 Swift 项目

    自学 iOS – 三十天三十个 Swift 项目 github源码地址:https://github.com/allenwong/30DaysofSwift

  2. 自学 iOS - 三十天三十个 Swift 项目 第一天

    最近公司项目不是很忙,偶然间看到编程语言排行榜,看到swift 已经排到前10了,然OC排名也越来越后了,感觉要上车了,虽然现在项目都是用OC写的,但是swift是一种趋势.在网上看到"自学 ...

  3. 自学 iOS - 三十天三十个 Swift 项目 第二天

    继续做仿造着别人的第二个 1.首先下载 一些字体 网上搜索 "造字工房" 2.把下载的相应字体文件放到工程之中,就Ok了 不多说 效果如下 可以下面这个方法 检索项目里面所有的字体 ...

  4. swift项目第三天:手写代码搭建主框架

    一:先配置环境:自定义Log输出(DEBUG 和 release模式),并屏蔽后台多余的打印信息 1:屏蔽后台多余的打印信息:如果写了OS_ACTIVITY_MODE = disable 还是不行.把 ...

  5. 【Android Studio安装部署系列】三十四、将Eclipse项目导入到Android Studio中

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 我采用的是笨方法:新创建Android Studio项目,然后将Eclipse项目中的目录一一复制到Android Studio项目 ...

  6. 第三十二章 System V信号量(三)

    n哲学家进餐问题描述有五个哲学家,他们的生活方式是交替地进行思考和进餐,n哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,n平时哲学家进行思考,饥饿时便试图取其左.右最靠近 ...

  7. 机器学习实战基础(三十六):随机森林 (三)之 RandomForestClassifier 之 重要属性和接口

    重要属性和接口 至此,我们已经讲完了所有随机森林中的重要参数,为大家复习了一下决策树的参数,并通过n_estimators,random_state,boostrap和oob_score这四个参数帮助 ...

  8. iOS开发之Todo List for Swift项目

    一直从事Windows Phone开发,但对iOS开发一直有所好奇,于是在MBP到手之际,顺手安装了Xcode.移动互联网开发的相似性,使得我能快速地了解和认识了iOS的开发框架体系,在看完了Appl ...

  9. FreeSql (三十)读写分离

    FreeSql 支持数据库读写分离,本功能是客户端的读写分离行为,数据库服务器该怎么配置仍然那样配置,不受本功能影响,为了方便描术后面讲到的[读写分离]都是指客户端的功能支持. 各种数据库的读写方案不 ...

随机推荐

  1. vim、gvim在windows下中文乱码的终极解决方式

    測试成功,完美解决. 仅仅需改动VIM文件夹以下的这个文件_vimrc. 加油吧,骚年.非常强大的! set encoding=utf-8 set fileencodings=utf-8,chines ...

  2. C++标准库和stl差别

    C++库文件夹:开发工具和语言-visual studio文档-visual C++-參考信息-库參考-standard C++ library C#库文件夹:C#使用.NET Framework 类 ...

  3. form标签中id和name属性的区别

    HTML元素的ID和Name属性的区别 一直认为ID和NAME是一样的,两个又可以一起出现,甚是疑惑. 今天BAIDU了一下,才发现里面大有文章.发出来研究研究: 最classical的答案:ID就像 ...

  4. C项目实践--图书管理系统(2)

    前面在<<C项目实践-图书管理系统(1)>>中把系统中的三大功能模块中可能涉及到的常量,结构体及相关函数进行了声明定义,下来就来实现它们. 执行系统首先从登录到系统开始,所以首 ...

  5. JDBC访问数据库查询信息的步骤(硬编码格式)

    1 Class.forName()加载驱动 2 DriverManager获取Connect连接 3 创建Statement执行SQL语句 4 返回ResultSet查询结果 5释放资源 packag ...

  6. accept()函数用来告诉Qt,事件处理函数“接收”了这个事件,不要再传递;ignore()函数则告诉Qt,事件处理函数“忽略”了这个事件,需要继续传递(看一下QWidget::mousePressEvent的实现,最为典型。如果希望忽略事件,只要调用父类的响应函数即可)

    QEvent的accept()和ignore()一般不会用到,因为不如直接调用QWidget类的事件处理函数直接,而且作用是一样的,见下面的例子. 推荐直接调用QWidget的事件处理函数.而不是调用 ...

  7. ibatis和mybatis的区别

    区别1:全局配置文件(sqlMapConfig.xml)的差异 主要是元素标签命名的差异,比如mybatis的根元素标签为<configuration>,ibatis的 根元素标签为< ...

  8. 并不对劲的[USACO07NOV,洛谷p2886]Cow Relays

    题意就是给一张无向有边权的图.起点.终点,求起点到终点经过n条边的最短路.n<=10^6,点的编号<=10^3,边数<=10^2. 这个边数让人不由自主地想到了floyd,然后发现f ...

  9. Python Import机制备忘-模块搜索路径(sys.path)、嵌套Import、package Import

    出处:http://blog.csdn.net/kernelspirit/article/details/3381666 最近在看<Python源码剖析>,对Python内部运行机制比以前 ...

  10. 字节流与字符流简单操作(OutputStream、InputStream、Writer、Reader)

    操作流程 使用File类打开一个文件 通过字节流或者字符流的子类.指定输出的位置. 进行读/写操作 关闭输入/出 字节流与字符流 在java.io包中操作文件内容主要有两大类:字节流字符流.两大类分为 ...