Swift - 彈出視圖的簡單實(shí)現(xiàn)

近期在做個(gè)播放器,期望將播放列表用彈出視圖的形式展現(xiàn)出來奸鬓,達(dá)到以下效果:

1.點(diǎn)擊列表按鈕焙畔,彈出播放列表
2.點(diǎn)擊播放列表中的歌曲串远,播放這個(gè)歌曲宏多;
3.點(diǎn)擊播放列表以外的區(qū)域,關(guān)閉播放列表澡罚;

效果圖如下:

彈出視圖.gif

分析:

這里的關(guān)鍵是:讓播放列表以外的所有區(qū)域響應(yīng)手勢伸但。
這就需要在播放列表視圖下放一個(gè)空視圖覆蓋住原有的界面,響應(yīng)手勢操作留搔。

實(shí)現(xiàn):

1.定義空視圖和表視圖

let emptyView = UIView()
let playListTableView = UITableView()

2.彈出播放列表視圖

func showPlayListTableView() {
    // 定義播放列表視圖的位置和大小
    let originPlayList = CGPoint(x: 0.3 * self.view.frame.width, y: 0.2 * self.view.frame.height)
    let sizePlayList = CGSize(width: 0.66 * self.view.frame.width, height: 0.66 * self.view.frame.height)
    
    // 定義手勢動(dòng)作并關(guān)聯(lián)手勢觸發(fā)的行為
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.dismissPlayListTableView(_:)))
    
    // 手勢需要遵循的代理:UIGestureRecognizerDelegate
    tapGestureRecognizer.delegate = self

    // 設(shè)置空視圖的大小更胖,打開交互,添加手勢
    emptyView.frame = self.view.frame
    emptyView.userInteractionEnabled = true
    emptyView.addGestureRecognizer(tapGestureRecognizer)
    
    // 設(shè)置 播放列表視圖 的背景圖片隔显、大小却妨、透明度
    playListTableView.backgroundView = UIImageView(image: UIImage(named: "playListBackground.jpg"))
    playListTableView.frame = CGRect(origin: originPlayList, size: sizePlayList)
    playListTableView.alpha = 0.8
    
    // 表視圖需要遵循代理:UITableViewDelegate, UITableViewDataSource
    playListTableView.delegate = self
    playListTableView.dataSource = self
    
    // 設(shè)置正在播放的歌曲顯示為選中狀態(tài)
    // 必須寫在 delegate 和 dataSource 之后才有效果
    playListTableView.selectRowAtIndexPath(NSIndexPath.init(forRow: getCurrentSongIndex(), inSection: 0), animated: false, scrollPosition: UITableViewScrollPosition.None)

    // 加載視圖
    emptyView.addSubview(playListTableView)
    self.view.addSubview(emptyView)
}

3.showPlayListTableView()中調(diào)用的方法

// 關(guān)閉播放列表
func dismissPlayListTableView(sender: UITapGestureRecognizer) {
    playListTableView.removeFromSuperview()
    emptyView.removeFromSuperview()
}

// 獲取當(dāng)前播放的歌曲,返回序號
func getCurrentSongIndex() -> Int {
    let title = self.titleLabel.text
    var index = 0
    
    for tempSong in songList {
        if (tempSong.songTitle == title) {
            index = songList.indexOf(tempSong)!
        }
    }
    return index
}

4.加載播放列表視圖的資源

// 設(shè)置表視圖的區(qū)域數(shù)量
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

// 設(shè)置表視圖的行數(shù)
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return songList.count
}

// 設(shè)置表視圖的單元格
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    // 樣式:Subtitle
    let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cellId")
    
    // 設(shè)置單元格顯示的文字內(nèi)容荣月、顏色等
    cell.textLabel?.text = songList[indexPath.row].songTitle
    cell.detailTextLabel?.text = songList[indexPath.row].singer
    cell.backgroundColor = UIColor.clearColor()
    cell.textLabel?.textColor = UIColor.lightGrayColor()
    cell.detailTextLabel?.textColor = UIColor.lightGrayColor()

    // 設(shè)置單元格被選擇后的背景視圖范圍和顏色
    cell.selectedBackgroundView = UIView(frame: cell.frame)
    cell.selectedBackgroundView?.backgroundColor = UIColor.darkGrayColor()
    
    return cell
}

// 設(shè)置選擇單元格后進(jìn)行的操作
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    // 設(shè)置當(dāng)前的歌曲為選擇的歌曲
    setCurrentSong(indexPath.row)
    // 播放
    audioPlayer.play()
    // 修改圖標(biāo)狀態(tài)
    self.playButton.setImage(UIImage(named: "pause.png"), forState: UIControlState.Normal)
}

5.限制dismissPlayListTableView的響應(yīng)區(qū)域

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
    let touchPoint = touch.locationInView(emptyView)
    
    // 如果touchPoint在播放列表的視圖范圍內(nèi)管呵,則不響應(yīng)手勢
    if CGRectContainsPoint(playListTableView.frame, touchPoint) {
        return false
    } else {
        return true
    }
}

到此,就可以實(shí)現(xiàn)效果圖中的彈出效果了哺窄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捐下,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子萌业,更是在濱河造成了極大的恐慌坷襟,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件生年,死亡現(xiàn)場離奇詭異婴程,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)抱婉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門档叔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桌粉,“玉大人,你說我怎么就攤上這事衙四×蹇希” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵传蹈,是天一觀的道長押逼。 經(jīng)常有香客問我,道長惦界,這世上最難降的妖魔是什么挑格? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮沾歪,結(jié)果婚禮上漂彤,老公的妹妹穿的比我還像新娘。我一直安慰自己瞬逊,他們只是感情好显歧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布仪或。 她就那樣靜靜地躺著确镊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪范删。 梳的紋絲不亂的頭發(fā)上蕾域,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機(jī)與錄音到旦,去河邊找鬼旨巷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛添忘,可吹牛的內(nèi)容都是我干的采呐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搁骑,長吁一口氣:“原來是場噩夢啊……” “哼斧吐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仲器,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤煤率,失蹤者是張志新(化名)和其女友劉穎壳嚎,沒想到半個(gè)月后洁闰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡划乖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年辆沦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昼捍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片识虚。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妒茬,靈堂內(nèi)的尸體忽然破棺而出舷礼,到底是詐尸還是另有隱情,我是刑警寧澤郊闯,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布妻献,位于F島的核電站,受9級特大地震影響团赁,放射性物質(zhì)發(fā)生泄漏育拨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一欢摄、第九天 我趴在偏房一處隱蔽的房頂上張望熬丧。 院中可真熱鬧,春花似錦怀挠、人聲如沸析蝴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闷畸。三九已至,卻和暖如春吞滞,著一層夾襖步出監(jiān)牢的瞬間佑菩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工裁赠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留殿漠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓佩捞,卻偏偏與公主長得像绞幌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子一忱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫莲蜘、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,098評論 4 62
  • 翻譯自“View Controller Programming Guide for iOS”掀潮。 1 彈出視圖控制器...
    lakerszhy閱讀 3,513評論 2 20
  • 看到本周的寫作主題菇夸,突然發(fā)現(xiàn)時(shí)間過的真快,那些過往的時(shí)光已被我遠(yuǎn)遠(yuǎn)的拋棄在記憶的長河里很難找尋仪吧,一直都覺得我是一個(gè)...
    n漫游書海n閱讀 234評論 0 0
  • 閱讀人:海連 閱讀頁數(shù):174-192 閱讀心得:家庭會(huì)議是一次親子間的特殊時(shí)光庄新,使家庭氛圍和諧,致謝讓孩子體會(huì)到...
    蓮與心閱讀 177評論 0 0
  • 經(jīng)常有朋友聊起:要孩子是為了什么?傳宗接代择诈?養(yǎng)兒防老械蹋?看到書里一個(gè)很感動(dòng)的答案說:“為了參與一個(gè)生命的成長,參與意...
    國富論天下閱讀 258評論 0 0