• Swift:在Safari中打开App

    2015-05-25 14:47:02
    打开之前会发生什么呢,先看看这个图: 我这里只是简单模拟了一下。当你输入一个特殊的“url”之后,Safari弹出一个提示,问你是否继续打开这个App。如果你这个时候confirm的话。那么这个App就会打开。 ...

    打开之前会发生什么呢,先看看这个图:

    我这里只是简单模拟了一下。当你输入一个特殊的“url”之后,Safari弹出一个提示,问你是否继续打开这个App。如果你这个时候confirm的话。那么这个App就会打开。

    我们打开看看这个app是什么样的App。看图:

    是一个灰常简答的TableView。然后点击某一行的时候会跳转到一个号称是详细也的地方。其实什么都没有。只有一个地方可以看的,那就是这个页面的title。记住这个title,后面的功能展示就全靠他了。

    当你跳转到详细页的时候就是这个样子的:

    是的就一个title,然后没别的了。

    我们接着上文继续。上文说到在Safari中输入一个特殊的“URL”,confirm了Safari的弹出框以后就会打开这个应用。到这里来说只是初级的功能。因为这样显然还是不够的。我们需要的是用户完成confirm弹出框以后可以打开详细页。一步一步来。

    1. 在Xcode6+版本中选择你的项目,之后选择infotab。看图:

    从左到右一共三步就到了设置url scheme的地方了。图:

    在info页面里的最下面有个URL Types,点开以后在里面设置URL Scheme为deeplink,当然了,这里可以按照你需要的方式设置任意的URL Scheme。

    到这里,保存一下然后运行你的App。App运行起来以后按下cmd+shift+H,调到app界面。之后打开Safari,在地址栏中输入deeplink://,然后点Go按钮。接下来就会弹出一个comfirm的弹框。点击open,你的app就会打开。图:

    1. 在地址栏中输入你定义的url scheme。

    2. 点Go按钮后弹出confirm框

    点open按钮后,你的app就会打开。

    但是。。我们要得不只是这样而已。url scheme能提供给我们的也不只是这样而已。我们要打开的是详细页。

    url 有了scheme,那么就可以有后面的一堆东西。比如:http://baidu.com。有了http://后面就可以有baidu.com。我们也可以这样用。在deeplink://后面加入一串数字,用这串数字可以代表很多。在这里我们就用这串数字来代表一个详细页需要展示的产品的产品编号。这些都很简单,但是怎么实现呢???

    其实,很多的App的第三方登录用的就是这个东西。比如微博或者微信的登录或者分享之类的。在选择了登录之后就会跳到微信或者微博里,等登录了以后就可以跳转回去。这些都是用的自定义url scheme。在配置SDK的时候你都会看到这样的要求。使用这样的方法打开的方法是:func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool,这个方法是在AppDelegate类中得。默认没有提供实现,需要我们自己添加。

     

    在这个方法执行的时候,添加一段代码:println(url.absoluteString),可以打印出来开启App的url是什么。我们这里当然是,比如,我要包括产品的详细编号的话就是:"deeplink://1234567890"。那么在这里打印出来的就是整个的这个字符串:"deeplink://1234567890"。因为,我们的url scheme是固定不变的。那么我们可以截取产品的具体编号。

    var itemCode = (url.absoluteStringas NSString).substringFromIndex(11)

    这样就可以获得产品的编号。然后调用window的rootViewController(需要说明的是,我们的rootViewControllerUINavigationController)。只需要把产品编号赋值给产品详细页的Controller,让这个Controller使用这个产品编号从服务器后端获取产品的详细信息就可以了。当然在后面的实现中是不包括从后端获取信息的内容的。这些功能也很容易添加。

    我们在DetailViewController中添加一个产品编号的属性:var productDetail: String!。之后,将这个属性赋值给Controller的title,在页面中展示出来。

        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.view.backgroundColor = UIColor.whiteColor()
            
            self.title = self.productDetail
        }
    

    了解了具体的展示以后,看看如何在上面说到的方法:func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool中如何处理页面的跳转,不处理的话只是打开了UINavigationController的rootViewController。

    这样的处理其实也很简单。UINavigationController本来已经是rootViewController了,只要push一下初始化好的DetailViewController就完事大吉了。非常简单。代码:

            if let window = self.window, let rootController = window.rootViewController {
    //            self.window?.rootViewController
                println("window is cool")
                var navController = rootController as! UINavigationController 
                var detailController = DetailViewController()
                detailController.productDetail = itemCode
                navController.pushViewController(detailController, animated: true)
            }
    

    这样就处理完毕了。打开safari,输入“deeplink://1234567890”,看看运行效果吧:

    so far so good!但是,还有一个bug。重复多次试验就会看到。想想怎么解决吧,就当是课后作业。

     

    欢迎加群互相学习,共同进步。QQ群:58099570 | 做人要厚道,转载请注明出处!

    展开全文
  • 1. 电商,最害怕的事情就是与用户失联了。 所以即时通讯是非常重要的。...3. QQ, 从外部打开指定QQ的聊天界面,是可以的,通过网页的方式。详细代码如下 UIWebView *webView = [[UIWebView alloc] initWithFr

    1. 电商,最害怕的事情就是与用户失联了。 所以即时通讯是非常重要的。 
    2. 微信, 现在微信已经把外部打开微信的方式全部禁用了,所以 打开是不可能的,微信只能通过加好友,才能与你的客服进行聊天
    3. QQ, 从外部打开指定QQ的聊天界面,是可以的,通过网页的方式。详细代码如下



    <span style="font-weight: normal;">UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
    NSURL *url = [NSURL URLWithString:@"mqq://im/chat?chat_type=wpa&uin=501542587&version=1&src_type=web"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    webView.delegate = self;
    [webView loadRequest:request];
    [self.view addSubview:webView];</span>


    其中 uin 字段后面的 就是你要打开的QQ号码, 也就是你的客服号码。
    展开全文
  • 我之前写过一篇文章:Swift - URL schemes的使用样例(如:在Safari中打开App)。介绍通过自定义的URL Scheme,实现从外部浏览器或外部应用打开我们的应用。 同样的,如果想从本地应用中跳转到其他的第三方应用并...

    我之前写过一篇文章:Swift - URL schemes的使用样例(如:在Safari中打开App)。介绍通过自定义的 URL Scheme,实现从外部浏览器或外部应用打开我们的应用。

    同样的,如果想从本地应用中跳转到其他的第三方应用并传值。同样是通过 URL Scheme 实现。

     

    一,使用样例

    常用的第三方应用都定义了不同的 URL Scheme,我们通过 UIApplication.shared.open() 方法打开相应的链接,即可跳转到对应的 App 中。(iOS10 以下的系统则是使用 UIApplication.shared.openURL() 方法)
     

    1,打开淘宝

    下面样例点击按钮后,会自动跳转到淘宝App中。由于我们还传递了一个商品链接参数,那么跳转过来后就会自动打开该商品页面。

         原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)        原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    import UIKit

     

    class ViewControllerUIViewController {

         

        override func viewDidLoad() {

            super.viewDidLoad()

        }

         

        @IBAction func click(_ sender: AnyObject) {

            let urlString = "taobao://item.taobao.com/item.htm?id=22671596473"

            if let url = URL(string: urlString) {

                //根据iOS系统版本,分别处理

                if #available(iOS 10, *) {

                    UIApplication.shared.open(url, options: [:],

                                              completionHandler: {

                                                (success) in

                    })

                else {

                    UIApplication.shared.openURL(url)

                }

            }

        }

         

        override func didReceiveMemoryWarning() {

            super.didReceiveMemoryWarning()

        }

    }

     

    2,打开百度地图

    下面样例点击按钮后,会自动跳转到百度地图App中。由于我们还传递了地址作为参数,那么跳转过来后就会自动定位到该位置。

    (注意:由于参数中带有中文,我们这里使用 addingPercentEncoding 方法对其转义一下。)     原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)        原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    import UIKit

     

    class ViewControllerUIViewController {

         

        override func viewDidLoad() {

            super.viewDidLoad()

        }

         

        @IBAction func click(_ sender: AnyObject) {

            let urlStr = "baidumap://map/geocoder?address=北京市海淀区上地信息路9号奎科科技大厦"

            let encodeUrlString = urlStr.addingPercentEncoding(withAllowedCharacters:

                .urlQueryAllowed)

            if let url = URL(string: encodeUrlString!) {

                //根据iOS系统版本,分别处理

                if #available(iOS 10, *) {

                    UIApplication.shared.open(url, options: [:],

                                              completionHandler: {

                                                (success) in

                    })

                else {

                    UIApplication.shared.openURL(url)

                }

            }

        }

         

        override func didReceiveMemoryWarning() {

            super.didReceiveMemoryWarning()

        }

    }


    3,打开微信扫一扫 

    下面样例点击按钮后,会自动跳转到微信App中。同时自动打开扫一扫界面。 

         原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)        原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    import UIKit

     

    class ViewControllerUIViewController {

         

        override func viewDidLoad() {

            super.viewDidLoad()

        }

         

        @IBAction func click(_ sender: AnyObject) {

            let urlString = "weixin://scanqrcode"

            if let url = URL(string: urlString) {

                //根据iOS系统版本,分别处理

                if #available(iOS 10, *) {

                    UIApplication.shared.open(url, options: [:],

                                              completionHandler: {

                                                (success) in

                    })

                else {

                    UIApplication.shared.openURL(url)

                }

            }

        }

         

        override func didReceiveMemoryWarning() {

            super.didReceiveMemoryWarning()

        }

    }

     

    二,常见应用的URL Scheme

    1,系统默认应用

     名称 URL Scheme Bundle identifier
     Safari  http://  
     maps  http://maps.google.com  
     Phone  tel://  
     SMS  sms://  
     Mail  mailto://  
     iBooks  ibooks://  
     App Store  itms-apps://itunes.apple.com  
     Music  music://  
     Videos  videos://  

     

    2,常用第三方软件

     名称 URL Scheme Bundle identifier
     QQ  mqq://  
     微信  weixin://  
     腾讯微博  TencentWeibo://  
     淘宝  taobao://  
     支付宝  alipay://  
     微博  sinaweibo://  
     weico微博  weico://  
     QQ浏览器  mqqbrowser:// com.tencent.mttlite
     uc浏览器  ucbrowser:// com.ucweb.iphone.uc 
    com.ucweb.iphone.lowversion
     海豚浏览器  dolphin:// com.dolphin.browser.iphone.chinese
     欧朋浏览器  ohttp:// com.oupeng.mini
     搜狗浏览器  SogouMSE:// com.sogou.SogouExplorerMobile
     百度地图  baidumap:// com.baidu.map
     Chrome  googlechrome://  
     优酷  youku://  
     京东 openapp.jdmoble://  
     人人  renren://  
     美团  imeituan://  
     1号店  wccbyihaodian://  
     我查查  wcc://  
     有道词典  yddictproapp://  
     知乎  zhihu://  
     点评  dianping://  
     微盘  sinavdisk://  
     豆瓣fm  doubanradio://  
     网易公开课  ntesopen://  
     名片全能王  camcard://  
     QQ音乐   qqmusic://  
     腾讯视频  tenvideo://  
     豆瓣电影  doubanmovie://  
     网易云音乐  orpheus://  
     网易新闻  newsapp://  
     网易应用  apper://  
     网易彩票  ntescaipiao://  
     有道云笔记  youdaonote://  
     多看  duokan-reader://  
     全国空气质量指数  dirtybeijing://  
     百度音乐  baidumusic://  
     下厨房   xcfapp://  


    原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1141.html

    展开全文
  • 我们常常看到市面上有很多 App,每用个一段时间就会弹出个框,问你是否要去 AppStore 上给它打个分。...除了跳转到 App Store,openURL 还要其它许多用法,具体参考我原来写的这篇文章:Swift - 打开第三方应用,并
    1,样例效果图
    当程序启动的时候会弹出消息框询问是否去评价。点击“好的”即跳转到这个应用的 AppStore 页面。
          原文:Swift - 从应用中跳转到App Store页面,并进行评论打分       原文:Swift - 从应用中跳转到App Store页面,并进行评论打分

    2,样例代码
    链接地址的末尾是你要跳转到的应用的 appID,这个是你提交 app 时候自动生成的,也是 AppStore 中的唯一的 ID(作为演示,这里我就使用 QQ 的 appID)。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import UIKit
     
    class ViewControllerUIViewController {
     
        override func viewDidLoad() {
            super.viewDidLoad()
          
        }
         
        override func viewDidAppear(animated: Bool) {
            //弹出消息框
            let alertController = UIAlertController(title: "觉得好用的话,给我个评价吧!",
                                                    message: nil, preferredStyle: .Alert)
            let cancelAction = UIAlertAction(title: "暂不评价", style: .Cancel, handler: nil)
            let okAction = UIAlertAction(title: "好的", style: .Default,
                                         handler: {
                                            action in
                                            self.gotoAppStore()
            })
            alertController.addAction(cancelAction)
            alertController.addAction(okAction)
            self.presentViewController(alertController, animated: true, completion: nil)
        }
         
        //跳转到应用的AppStore页页面
        func gotoAppStore() {
            let urlString = "itms-apps://itunes.apple.com/app/id444934666"
            let url = NSURL(string: urlString)
            UIApplication.sharedApplication().openURL(url!)
        }
     
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
     
        }
    }
    展开全文
  • swift3.0 仿QQ音乐APP

    2016-11-29 19:30:58
    作为练手小项目,大神请绕道,知识点包括两种定时器的应用场景(效率优化)、暂停和恢复动画、滚动、歌词进度显示、后台播放、...// QQDetailVC.swift // QQMusic // // Created by targetcloud on 2016/11/29. // Cop

    500行左右代码就可以见到下面的效果了,这里贴出的代码为最复杂一个,约200行,完整的请下载,随便给个star,谢谢

    源码下载地址:https://github.com/targetcloud/QQMusic

    作为练手小项目,大神请绕道,知识点包括两种定时器的应用场景(效率优化)、暂停和恢复动画、滚动、歌词进度显示、后台播放、锁屏播放、快进快退、音量控制

    //
    //  QQDetailVC.swift
    //  QQMusic
    //
    //  Created by targetcloud on 2016/11/29.
    //  Copyright © 2016年 targetcloud. All rights reserved.
    //
    
    import UIKit
    //updateOnce updateTimes updateLrc三者频率是越来越快的节奏,后两者用定时器实现,分别用每秒和每秒60次两种分别实现updateTimes updateLrc
    class QQDetailVC: UIViewController,UIScrollViewDelegate {
    
        @IBOutlet weak var lrcScrollView: UIScrollView!
        @IBOutlet weak var backImageView: UIImageView!
        @IBOutlet weak var foreImageView: UIImageView!
        @IBOutlet weak var songNameLabel: UILabel!
        @IBOutlet weak var singerNameLabel: UILabel!
        @IBOutlet weak var totalTimeLabel: UILabel!
        lazy var lrcVC: QQLrcTVC = {
            return QQLrcTVC()
        }()
        @IBOutlet weak var lrcLabel: QQLrcLabel!
        @IBOutlet weak var progressSlider: UISlider!
        @IBOutlet weak var costTimeLabel: UILabel!
        @IBOutlet weak var playOrPauseBtn: UIButton!
        var updateTimesTimer: Timer?
        var updateLrcLink: CADisplayLink?
        
        deinit {
            NotificationCenter.default.removeObserver(self)
        }
        
        //UISlider的四个事件(tap、touchDown、touchUp、valueChange)
        @IBAction func tap(_ sender: UITapGestureRecognizer) {
            print("tap")
            let value = sender.location(in: sender.view).x / (sender.view?.width)!
            progressSlider.value = Float(value)
            let totalTime = QQMusicOperationTool.shareInstance.getMusicMessageModel().totalTime
            let costTime = totalTime * TimeInterval(value)
            QQMusicOperationTool.shareInstance.seekToTime(costTime)//跳到指定时间点播放
        }
        
        @IBAction func touchDown() {
            removeTimer()
        }
        
        @IBAction func touchUp() {
            addTimer()
            let costTime = QQMusicOperationTool.shareInstance.getMusicMessageModel().totalTime * TimeInterval(progressSlider.value)
            QQMusicOperationTool.shareInstance.seekToTime(costTime)//跳到指定时间点播放
        }
        
        @IBAction func valueChange() {
            let costTime = QQMusicOperationTool.shareInstance.getMusicMessageModel().totalTime * TimeInterval(progressSlider.value)
            costTimeLabel.text = QQTimeTool.getFormatTime(costTime)//更新已播放时长
        }
        
        @IBAction func close() {
            navigationController?.popViewController(animated: true)
        }
        
        @IBAction func playOrPause(_ sender: UIButton) {
            sender.isSelected = !sender.isSelected
            if sender.isSelected {
                QQMusicOperationTool.shareInstance.playCurrentMusic()
                foreImageView.layer.resumeAnimate()
            }else {
                QQMusicOperationTool.shareInstance.pauseCurrentMusic()
                foreImageView.layer.pauseAnimate()
            }
        }
        
        @IBAction func preMusic() {
            QQMusicOperationTool.shareInstance.preMusic()
            updateOnce()
        }
        
        @IBAction func nextMusic() {
            QQMusicOperationTool.shareInstance.nextMusic()
            updateOnce()
        }
        
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            updateOnce()
            addTimer()
            addLink()
        }
        
        override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(animated)
            removeTimer()
            removeLink()
        }
        
        override func viewDidLoad() {
            super.viewDidLoad()
            lrcVC.tableView.backgroundColor = UIColor.clear
            lrcScrollView.addSubview(lrcVC.tableView)//添加歌词控制器的tableview(歌词视图) 到 滚动视图中进行占位
            lrcScrollView.delegate = self//滚动代理用UIScrollViewDelegate〈scrollViewDidScroll〉
            lrcScrollView.isPagingEnabled = true//滚动scrollview时分页
            lrcScrollView.showsHorizontalScrollIndicator = false//去掉滚动条
            progressSlider.setThumbImage(UIImage(named: "player_slider_playback_thumb"), for: UIControlState())
            
            NotificationCenter.default.addObserver(self, selector: #selector(QQDetailVC.nextMusic), name: NSNotification.Name(rawValue: kPlayFinishNotification), object: nil)
        }
        
        func addTimer() {
            updateTimesTimer = Timer(timeInterval: 1, target: self, selector: #selector(QQDetailVC.updateTimes), userInfo: nil, repeats: true)
            RunLoop.current.add(updateTimesTimer!, forMode: RunLoopMode.commonModes)
        }
        
        func removeTimer() {
            updateTimesTimer?.invalidate()
            updateTimesTimer = nil
        }
        
        func addLink() {
            updateLrcLink = CADisplayLink(target: self, selector: #selector(QQDetailVC.updateLrc))
            updateLrcLink?.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
        }
        
        func removeLink() {
            updateLrcLink?.invalidate()
            updateLrcLink = nil
        }
        
        func updateOnce() {
            let musicMessageM = QQMusicOperationTool.shareInstance.getMusicMessageModel()
            guard let musicM = musicMessageM.musicM else {return}
            if musicM.icon != nil{
                backImageView.image = UIImage(named: (musicM.icon)!)
                foreImageView.image = UIImage(named: (musicM.icon)!)
            }
            songNameLabel.text = musicM.name
            singerNameLabel.text = musicM.singer
            totalTimeLabel.text = musicMessageM.totalTimeFormat //QQTimeTool.getFormatTime(musicMessageM.totalTime)
            //交由歌词控制器来展示
            lrcVC.lrcMs = QQMusicDataTool.getLrcMs(musicM.lrcname)
            //大圆图播放旋转动画
            foreImageView.layer.removeAnimation(forKey: "rotation")
            let animation = CABasicAnimation(keyPath: "transform.rotation.z")
            animation.fromValue = 0
            animation.toValue = M_PI * 2
            animation.duration = 30
            animation.isRemovedOnCompletion = false
            animation.repeatCount = MAXFLOAT
            foreImageView.layer.add(animation, forKey: "rotation")
            
            if musicMessageM.isPlaying {
                foreImageView.layer.resumeAnimate()
            }else {
                foreImageView.layer.pauseAnimate()
            }
        }
        
        func updateTimes() {//UISlider的播放进度更新,频率比updateLrc低
            let musicMessageM = QQMusicOperationTool.shareInstance.getMusicMessageModel()
            progressSlider.value = Float(musicMessageM.costTime / musicMessageM.totalTime)
            costTimeLabel.text =  musicMessageM.costTimeFormat//QQTimeTool.getFormatTime(musicMessageM.costTime)
            playOrPauseBtn.isSelected = musicMessageM.isPlaying
        }
        
        func updateLrc() {//更新频度比updateTimes快60倍,主要用于一行歌词着色进度需求
            let musicMessageM = QQMusicOperationTool.shareInstance.getMusicMessageModel()
            let time = musicMessageM.costTime
            let rowLrcM = QQMusicDataTool.getCurrentLrcM(time, lrcMs: lrcVC.lrcMs)
            let lrcM = rowLrcM.lrcM
            lrcLabel.text = lrcM?.lrcContent//更新歌词,固定的单行歌词
            if lrcM != nil {
                lrcLabel.radio =  CGFloat((time - lrcM!.beginTime) / (lrcM!.endTime - lrcM!.beginTime))
                lrcVC.progress = lrcLabel.radio//同步更新歌词进度,一行歌词着色进度
            }
            lrcVC.scrollRow = rowLrcM.row//流动整屏时用到的位置行
            if UIApplication.shared.applicationState == .background {
                QQMusicOperationTool.shareInstance.setupLockMessage()//更新锁屏界面信息
            }
        }
        
        override func viewWillLayoutSubviews() {//尺寸类的放在这里进行调整,以获取到最终的正确尺寸
            super.viewWillLayoutSubviews()
            lrcVC.tableView.frame = lrcScrollView.bounds//歌词视图大小调整
            lrcVC.tableView.x = lrcScrollView.width//默认放在最右边,滚动时出现
            lrcScrollView.contentSize = CGSize(width: lrcScrollView.width * 2, height: 0)//scroll,要实现滚动的前提是要有contentSize,2页的大小
            foreImageView.layer.cornerRadius = foreImageView.width * 0.5//大图片圆形效果
            foreImageView.layer.masksToBounds = true
        }
        
        override var preferredStatusBarStyle : UIStatusBarStyle {
            return .lightContent
        }
        
        func scrollViewDidScroll(_ scrollView: UIScrollView) {//alpha change
            let radio = 1 - scrollView.contentOffset.x / scrollView.width
            foreImageView.alpha = radio
            lrcLabel.alpha = radio
        }
        
        override func remoteControlReceived(with event: UIEvent?) {//远程事件
            switch (event?.subtype)! {
            case .remoteControlPlay:
                QQMusicOperationTool.shareInstance.playCurrentMusic()
            case .remoteControlPause:
                QQMusicOperationTool.shareInstance.pauseCurrentMusic()
            case .remoteControlNextTrack:
                QQMusicOperationTool.shareInstance.nextMusic()
            case .remoteControlPreviousTrack:
                QQMusicOperationTool.shareInstance.preMusic()
            default:
                print("...")
            }
            updateOnce()
        }
        
        override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) {//摇一摇
            QQMusicOperationTool.shareInstance.nextMusic()
            updateOnce()
        }
    
    }
    

    效果图





    加上快进快退、音量控制


    展开全文
  • 判断本机是否安装某些app / To determine whether the installation of some app
  • 但并不是每次都想使用这些第三方的服务的, 这里作者整理了微信, QQ, 新浪微博原生第三方的接入:[Swift]原生第三方接入: 微信篇--集成/登录/分享/支付[Swift]原生第三方接入: QQ篇--集成/登录/分享[Swift]原生...
  • Swift开发Mac App(3)

    2015-04-22 14:00:25
    显示昆虫列表在 OS X中,Table View使用 NSTableView类,它等同于iOS的UITableView 类,但有一个最大的不同是:NSTableView 的每一行有多个列或多个单元格。· 在OS X 10.7Lion之前,table view cell继承于NSCell...
  • 我之前写过一篇关于调用QQ分享的文章:Swift - 腾讯官方SDK的配置及使用(分享到QQ空间、分享到好友)。通过使用腾讯提供的 SDK,我们可以从自己的 App 跳转到手机 QQ,将消息分享给QQ 好友或发布到空间上。 ...
  • 前言Swift 语言,怎么说呢,有一种先接受后排斥,又欢迎的感觉,纵观国外大牛开源框架或项目演示,Swift几乎占据了多半,而国内虽然出现很多相关技术介绍和教程,但是在真正项目开发中使用的占据很少部分,原因一是...
  • Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) 通过前面的学习,一个天气预报的APP已经基本可用了。至少可以查看现在当前的天气情况和未来几个小时的天气...
  • 如何区别一个 App 是 Native App, Web App 还是 Hybrid app
  • Swift Playgrounds 能够开发手机App么 “我只有一​​台iPad。我可以用它来开发iOS应用吗?” 对于初学者来说,这是最常见的问题之一。我的回答总是:“不,您需要一台Mac才能运行Xcode进行iOS应用开发。 但是iPad版...
  • 我们知道在App Store中几乎所有软件都设计到账户的登入,而我们最常见的就是QQ,微信,在没有踏入程序员这条不归路之前,看到一个个的界面都感觉好高大上的样子。 在学习的过程中,自己就照着手机上面APP自己比较...
  • Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) Swift作为现在苹果极力推广的语言,发展的非常快。这个语言就和她的名字一样,比OC减少了很多的文件和代码...
  • ThemeStyleToolsGitHub地址这是一个更换主题的库,只支持更换一个主体颜色,依赖于RXSwift。由于更换主题的需求可能都是五花八门的,每个产品的想法也都有可能不同,有的需要更换tabbar的图片,或者导航栏的图片等等...
  • swift3-app国际化

    2017-04-07 16:03:51
    本文主要介绍了应用程序名称的国际化和storyboard中的国际化,以English和简体中文为例。
  • 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还不够成熟没有正式发布。2016年初我们正式使用swift开发上线了销售助手App产品,积累了比较丰富的swift项目实战...
1 2 3 4 5 ... 20
收藏数 3,577
精华内容 1,430
热门标签