iOS 面向协议封装全屏旋转功能

栏目: IOS · 发布时间: 6年前

内容简介:关于使用面向协议来封装功能的实战可以参考我上篇文章如果对面向协议有疑问的同学可以看下我之前的两篇文章

关于使用面向协议来封装功能的实战可以参考我上篇文章 【iOS 面向协议方式封装空白页功能】 ,这里就不再赘述,直接进入使用阶段吧

如果对面向协议有疑问的同学可以看下我之前的两篇文章

iOS - Swift 面向协议编程(一)

iOS - Swift 面向协议编程(二)

开源库

Name Link
GitHub LXFProtocolTool
Wiki Wiki首页
本文 Demo LXFFullScreenable

使用Cocoapods的方式来安装即可

pod 'LXFProtocolTool/FullScreenable'
复制代码

一、配置

AppDelegate
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    if UIApplication.shared.lxf.allowRotation { // 可旋转屏幕时所支持的方向
        return UIInterfaceOrientationMask.landscape
    }
    return .portrait
}
复制代码

二、使用案例

方法与属性的调用都需要命名空间加上 lxf ,如 isFullScreen -> lxf.isFullScreen

isFullScreen : 获取当前遵守协议者是否为全屏状态
复制代码
func switchFullScreen(
    isEnter: Bool? = nil,
    specifiedView: UIView? = nil,
    superView: UIView? = nil,
    config: FullScreenableConfig? = nil,
    completed: ((_ isFullScreen: Bool)->Void)? = nil
)
复制代码
Name Type Desc
isEnter Bool? 是否进入全屏
specifiedView UIView? 指定即将全屏的视图
superView UIView? 作为退出全屏后specifiedView的父视图
config FullScreenableConfig? 配置
completed ((_ isFullScreen: Bool)->Void)? 进入/退出 全屏后的回调

switchFullScreen 的调用者为 UIView 时,如果 specifiedViewnil 会自动填写, superView 也是如此

switchFullScreen 方法不推荐直接使用,不过当遵守协议者为 UIViewController 时,可以通过使用默认参数来切换屏幕方向 lxf.switchFullScreen()

iOS 面向协议封装全屏旋转功能

以下分两种情况说明

UIViewController

func enterFullScreen(
    specifiedView: UIView,
    config: FullScreenableConfig? = nil,
    completed: FullScreenableCompleteType? = nil
)
复制代码
func exitFullScreen(
    superView: UIView,
    config: FullScreenableConfig? = nil,
    completed: FullScreenableCompleteType? = nil
)
复制代码

以上两个方法是对 switchFullScreen 的抽离,使调用时对参数的传递更加清晰

1、遵守协议 FullScreenable

class LXFFullScreenableController: UIViewController, FullScreenable { }
复制代码

2、指定视图进入全屏

lxf.enterFullScreen(specifiedView: cyanView)
复制代码

3、指定视图退出全屏,并添加到当前控制器的 view

lxf.exitFullScreen(superView: self.view)
复制代码

UIView

func enterFullScreen(
    specifiedView: UIView? = nil,
    config: FullScreenableConfig? = nil,
    completed: FullScreenableCompleteType? = nil
)
复制代码
func exitFullScreen(
    superView: UIView? = nil,
    config: FullScreenableConfig? = nil,
    completed: FullScreenableCompleteType? = nil
)
复制代码

以上两个方法是对 switchFullScreen 的抽离,使调用时对参数的传递更加清晰

1、遵守协议 FullScreenable

class LXFFullScreenView: UIButton, FullScreenable { }
复制代码
let cyanView = LXFFullScreenView()
复制代码

2、进入全屏

cyanView.lxf.enterFullScreen()
复制代码

3、退出全屏

cyanView.lxf.exitFullScreen()
复制代码

这里是对遵守了 FullScreenable 协议的视图进入全屏切换,由于代码内部已经经过自动视图填写,所以直接调用相应的方法即可,当然也可以自己指定 specifiedViewsuperView

iOS 面向协议封装全屏旋转功能

三、FullScreenableConfig说明

上述的方法都有一个 config 参数,默认为nil,即为默认配置

相关属性说明

Name Type Desc Default
animateDuration Double 进入/退出 全屏时的旋转动画时间 0.25
enterFullScreenOrientation UIInterfaceOrientation 进入全屏时的初始方向 landscapeRight

这里我们把动画时间设置为 1s ,初始方向为 后来看看效果

FullScreenableConfig(
    animateDuration: 1,
    enterFullScreenOrientation : .landscapeLeft
)
复制代码
cyanView.lxf.enterFullScreen(config: diyConfig)
cyanView.lxf.exitFullScreen(config: diyConfig)
复制代码
iOS 面向协议封装全屏旋转功能

结语

到这里相关的说明已罗列完毕,有什么不清楚的可以下载 Demo 看看,或者在文章下方留言提问

LXFProtocolTool 主要是通过协议的方式来方便快捷地实现一些的实用功能,除了本文提及的全屏旋转功能外还有其它实用功能的封装,具体内容可以到 Wiki首页 查找。如果你有什么想实现的功能也可以提出来,喜欢的就给个Star鼓励下我吧 :rocket: :rocket: :rocket:,感谢支持!


以上所述就是小编给大家介绍的《iOS 面向协议封装全屏旋转功能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Agile Web Development with Rails 4

Agile Web Development with Rails 4

Sam Ruby、Dave Thomas、David Heinemeier Hansson / Pragmatic Bookshelf / 2013-10-11 / USD 43.95

Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details. Tens of thousands of deve......一起来看看 《Agile Web Development with Rails 4》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码