先看效果圖
Day 2用的是拖線囚痴,這里使用純代碼完成
<br />
1叁怪、創(chuàng)建工程、搭建UI
創(chuàng)建工程不說了深滚!
直接搭建UI
分析UI奕谭,一個tableView,自定的Cell
1.1創(chuàng)建tableView
var tableView = UITableView()
或者
var tableview :UITableView? = UITableView()
1.2創(chuàng)建Cell
下一步痴荐,名字隨便你
觀察可得知Cell至少包含
UIImageView血柳,UIbutton ,UIlabel(兩個)
所以在你的Swift中申明一下變量
var icon: UIImageView?
var titleLabel : UILabel?
var deTitleLabel: UILabel?
var playBtn : UIButton?
1.3 創(chuàng)建icon生兆、titleLabel难捌,deTitleLabel、playBtn
在init init(style: UITableViewCellStyle, reuseIdentifier: String?)方法中創(chuàng)建
在layoutSubViews中布局
override func layoutSubviews() {
super.layoutSubviews()
icon?.frame = self.contentView.bounds
playBtn?.bounds = CGRectMake(0, 0, 50, 50)
playBtn?.frame.origin = CGPointMake((self.contentView.bounds.size.width - 50) / 2, (self.contentView.bounds.size.height - 50) / 2)
playBtn?.setImage(UIImage.init(named: "playBtn"), forState: UIControlState.Normal)
titleLabel?.frame = CGRectMake(0, self.contentView.bounds.size.width * 0.5 - 10, self.contentView.bounds.size.width, 20);
deTitleLabel?.frame = CGRectMake(0, self.contentView.bounds.size.width * 0.5 + 20, self.contentView.bounds.size.width, 20);
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
playBtn = UIButton.init(type: UIButtonType.Custom)
playBtn?.addTarget(self, action: #selector(TableViewCell.click(_:)), forControlEvents: UIControlEvents.TouchUpInside);
icon = UIImageView.init()
titleLabel = UILabel.init();
titleLabel?.textAlignment = NSTextAlignment.Center
titleLabel?.textColor = UIColor.whiteColor()
deTitleLabel = UILabel.init();
deTitleLabel?.textAlignment = NSTextAlignment.Center
deTitleLabel?.textColor = UIColor.whiteColor()
self.contentView.addSubview(icon!)
self.contentView.addSubview(playBtn!)
self.contentView.addSubview(titleLabel!)
self.contentView.addSubview(deTitleLabel!)
}
上面的代碼基本上就是設(shè)置大小皂贩,位置
textAlignment:文字對齊方式
textColor:文字顏色
addSubView()添加到View中
addTarget:添加事件
frame大小位置
bounds:大小 x y 一般寫0
init()初始化
實(shí)現(xiàn)按鈕點(diǎn)擊方法:不然會報(bào)錯
func click(button:UIButton){
print("click me");
}
1.4栖榨、創(chuàng)建TableView昆汹,添加到View中明刷,設(shè)置代理,實(shí)現(xiàn)代理满粗,創(chuàng)建數(shù)據(jù)源辈末,提前注冊Cell,
與下面代碼一一對應(yīng)
tableView = UITableView.init(frame: self.view.bounds, style: UITableViewStyle.Plain)
tableView.delegate = self;
tableView.dataSource = self;
self.view.addSubview(tableView);
tableView.registerClass(TableViewCell.self, forCellReuseIdentifier: "Cell")
導(dǎo)入代理:
class ViewController: UIViewController ,UITableViewDataSource,UITableViewDelegate
實(shí)現(xiàn)代理方法
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
cell.delegate = self
return cell;
}
2、設(shè)置數(shù)據(jù)源
在1中完成了自定義Cell映皆,使用代碼創(chuàng)建TableView挤聘,但是運(yùn)行并沒有數(shù)據(jù)
接下來就是為Cell設(shè)置數(shù)據(jù)源
在Cell中添加一個方法
func initData(imageNamed : NSString , title : NSString , deTitle : NSString){
icon?.image = UIImage.init(named: imageNamed as String)
titleLabel?.text = String(title)
deTitleLabel?.text = deTitle as String
}
這里我們需要圖片名稱、標(biāo)題捅彻、時間
所以我們創(chuàng)建一個結(jié)構(gòu)體在Swift中
struct video {
let imageNamed: String
let title: String
let time:String
}
在把數(shù)據(jù)源添加好:
var data : Array = [video(imageNamed: "videoScreenshot01", title: "Introduce 3DS Mario", time: "Youtube - 06:32"),
video(imageNamed: "videoScreenshot02", title: "Emoji Among Us", time: "Vimeo - 3:34"),
video(imageNamed: "videoScreenshot03", title: "Seals Documentary", time: "Vine - 00:06"),
video(imageNamed: "videoScreenshot04", title: "Adventure Time", time: "Youtube - 02:39"),
video(imageNamed: "videoScreenshot05", title: "Facebook HQ", time: "Facebook - 10:20"),
video(imageNamed: "videoScreenshot06", title: "Lijiang Lugu Lake", time: "Allen - 20:30")]
然后對tableVIew的方法進(jìn)行修改
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
cell.delegate = self
let model = self.data[indexPath.row];
cell.initData(model.imageNamed, title: model.title, deTitle: model.time)
到這里為止:我們完成了展示组去,可是我們點(diǎn)擊并不能播放,所以實(shí)現(xiàn)最后一步:
回調(diào)
4步淹、回調(diào)
-
4.1 閉包:
4.1.1 申明一個閉包:
typealias buttonClickFunc = (button:UIButton)->Void
4.1.2 申明一個變量
var myBtnClickBlock = buttonClickFunc?()
4.1.3 添加一個方法
func myPlayBtnClickBlock(block:(button:UIButton)->Void){
myBtnClickBlock = block
}
4.1.4 在按鈕點(diǎn)擊事件中調(diào)用
func click(button:UIButton){
print("click me");
//如果block不存在就不調(diào)用
if (myBtnClickBlock != nil) {
myBtnClickBlock!(button: button)
}
}
4.1.5 在ViewController中修改方法
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
cell.delegate = self
let model = self.data[indexPath.row];
cell.initData(model.imageNamed, title: model.title, deTitle: model.time)
cell.myPlayBtnClickBlock { (button) in
print("我是VC")
}
return cell;
}
到這里你就會發(fā)現(xiàn)能打印“我是VC”从隆,這行了诚撵,然后我們就可以開始播放視頻了,
- 播放視頻之前要把視頻導(dǎo)入到項(xiàng)目工程中键闺,項(xiàng)目最后會把資源上傳
寫一個方法專門用來播放視頻
先導(dǎo)入必要框架
import AVKit
import AVFoundation
申明對象:
var playViewController = AVPlayerViewController()
var playerView = AVPlayer()
播放視頻的實(shí)現(xiàn)
func playVideo(){
let path = NSBundle.mainBundle().pathForResource("emoji zone", ofType: "mp4")
self.playerView = AVPlayer(URL: NSURL(fileURLWithPath: path!))
self.playViewController.player = self.playerView
self.presentViewController(self.playViewController, animated: true) {
self.playViewController.player?.play()
}
}
path :加載視頻路徑
..下面的就是創(chuàng)建播放對象寿烟,然后present到一個頁面,進(jìn)行播放...
-
4.2使用代理
申明代理:
protocol myBtnClickCellDelegate : class {
func cellPlayBtnClick(cell : TableViewCell, button : UIButton)
}
這里需要注意:創(chuàng)建一個weak的變量
weak var delegate : myBtnClickCellDelegate?
在Viewcontroller中導(dǎo)入代理
class ViewController: UIViewController ,UITableViewDataSource,UITableViewDelegate ,myBtnClickCellDelegate
實(shí)現(xiàn)代理方法:你不實(shí)現(xiàn)會報(bào)錯的辛燥,啊哈哈哈??
func cellPlayBtnClick(cell: TableViewCell, button: UIButton) {
print("進(jìn)入代理了I肝洹!挎塌!")
playVideo()
}
在點(diǎn)擊按鈕的時候調(diào)用代理
func click(button:UIButton){
print("click me");
delegate?.cellPlayBtnClick(self, button: button)
}
然后就可以實(shí)現(xiàn)了E橇!勃蜘!
最后把