SPPermission
关于
使用对话框请求权限。我在这里实现了带有强Apple风格
的UI。观看我在YouTube上设计此pod的UI的时间轴在这里。
访问我的iOS开发者商店
我需要将我的应用Debts翻译,如果您能帮助我,我可以免费向您提供项目。 相互帮助!
如果喜欢这个项目,别忘了给star ★
并关注我的GitHub
导航
要求
Swift 4.2
& 5.0
。适用于iOS 10+
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要将 SPPermission
集成到您的 Xcode 项目中使用 CocoaPods,请在您的 Podfile
中指定它
pod 'SPPermission/Notification'
由于 Apple 对权限访问的新政策,您需要特别定义您想使用 subspecs 访问的权限类型。例如,如果您想访问 Camera
、Location
和 Microphone
,请定义以下内容
pod 'SPPermission/Camera'
pod 'SPPermission/Location'
pod 'SPPermission/Microphone'
可用 subspecs
pod 'SPPermission/Camera'
pod 'SPPermission/Contacts'
pod 'SPPermission/Calendar'
pod 'SPPermission/PhotoLibrary'
pod 'SPPermission/Notification'
pod 'SPPermission/Microphone'
pod 'SPPermission/Reminders'
pod 'SPPermission/SpeechRecognizer'
pod 'SPPermission/Location'
pod 'SPPermission/Motion'
pod 'SPPermission/MediaLibrary'
Carthage
Carthage 是一个去中心化的依赖管理器,它构建您的依赖并提供二进制框架。要使用 Carthage 将 SPPermission
集成到您的 Xcode 项目中,请在国际 Cartfile
中指定它
github "ivanvorobei/SPPermission"
默认情况下,所有权限都可用。您可以在构建动态框架之前提供自定义构建标志,仅编译您请求的权限。打开 Source/Supporting Files
中的文件 Configuration.xcconfig,注释不可用权限并重新构建
carthage build
手动
如果您不想使用任何依赖管理器,您可以将 SPPermission
手动集成到项目中。将 Source/SPPermission
文件夹放入您的 Xcode 项目中。请确保启用 按需复制项
和 创建组
。
之后需要实现配置文件。请查看示例 配置文件 或示例项目。
使用方法
调用SPPermission
并使用函数request()
。同时,传递对话框应显示的控制器
import UIKit
import SPPermission
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
SPPermission.Dialog.request(with: [.camera, .microphone, .notification], on: self)
}
}
如果您只想在需要权限时请求权限,可以使用requestIfNeeded()
SPPermission.Dialog.requestIfNeeded(with: [.camera, .microphone, .notification], on:self)
如果您想了解权限是否允许,需要调用该函数
let isAllowedCamera = SPPermission.isAllowed(.camera)
let isDeniedMicrophone = SPPermission.isDenied(.microphone)
要了解如何自定义标题和图像,请参阅自定义部分
权限
如果您想在需要时使用无对话框请求权限,请使用该函数
SPPermission.request(.notification, with: {
// Callback
})
如果要添加新权限,请创建问题。
自定义
协议
如果您想更改文本,需要实现SPPermissionDialogDataSource
协议。覆盖所需参数以查看更改
extension Controller: SPPermissionDialogDataSource {
var showCloseButton: Bool {
return true
}
}
并将对象传递给函数
SPPermission.Dialog.request(
with: [.photoLibrary, .contacts],
on: self,
delegate: self,
dataSource: self
)
文本
所有属性和函数都是可选的。函数可以返回nil
。如果您这样做,将使用默认值。
extension Controller: SPPermissionDialogDataSource {
var dialogTitle: String { return "Need Permissions" }
var dialogSubtitle: String { return "Permissions Request" }
var dialogComment: String { return "Push are not required permissions" }
var allowTitle: String { return "Allow" }
var allowedTitle: String { return "Allowed" }
var bottomComment: String { return "" }
func name(for permission: SPPermissionType) -> String? { return nil }
func description(for permission: SPPermissionType) -> String? { return nil }
func deniedTitle(for permission: SPPermissionType) -> String? { return nil }
func deniedSubtitle(for permission: SPPermissionType) -> String? { return nil }
var cancelTitle: String { return "Cancel" }
var settingsTitle: String { return "Settings" }
}
关闭按钮
要添加或移除关闭按钮,需要覆盖参数showCloseButton
。没有按钮时,您需要滑动对话框来关闭它。
var showCloseButton: Bool {
return true
}
要查看外观,请查看下面的图片
拖动
要禁用拖动,请覆盖dragEnabled
。如果需要允许拖动,但禁用滑动以隐藏,请覆盖dragToDismiss
。
var dragEnabled: Bool {
return true
}
var dragToDismiss: Bool {
return true
}
颜色
如果想要更改配色方案,您需要实现协议SPPermissionDialogColorSource
。您不需要覆盖所有参数,只需更改必要的那些即可。
@objc public protocol SPPermissionDialogColorSource: class {
@objc optional var whiteColor: UIColor { get }
@objc optional var blackColor: UIColor { get }
@objc optional var baseColor: UIColor { get }
@objc optional var grayColor: UIColor { get }
@objc optional var lightGrayColor: UIColor { get }
@objc optional var iconWhiteColor: UIColor { get }
@objc optional var iconLightColor: UIColor { get }
@objc optional var iconMediumColor: UIColor { get }
@objc optional var iconDarkColor: UIColor { get }
@objc optional var closeIconBackgroundColor: UIColor { get }
@objc optional var closeIconColor: UIColor { get }
}
将自动检查是否实现了SPPermissionDialogDataSource
和SPPermissionDialogColorSource
。您需要传递一个实现了两个协议的dataSource
对象。
起始位置
属性startTransitionYoffset
用于自定义启动前位置。如果需要禁用晃动动画,设置为0。默认使用center.y * 1.2
。
var startTransitionYoffset: CGFloat {
return 0
}
代理
要跟踪与SPPermission
关联的隐藏和允许权限的事件,请实现协议SPPermissionDialogDelegate
。
@objc public protocol SPPermissionDialogDelegate: class {
@objc optional func didHide()
@objc optional func didAllow(permission: SPPermissionType)
@objc optional func didDenied(permission: SPPermissionType)
}
并将代理传递给函数
SPPermission.Dialog.request(
with: [.calendar, .microphone],
on: self,
delegate: self
)
Info.plist 中的键
您需要向带描述的 Info.plist
文件中添加一些键。键列表
- NSCameraUsageDescription
- NSContactsUsageDescription
- NSCalendarsUsageDescription
- NSMicrophoneUsageDescription
- NSAppleMusicUsageDescription
- NSSpeechRecognitionUsageDescription
- NSMotionUsageDescription
- NSLocationWhenInUseUsageDescription
- NSLocationAlwaysAndWhenInUseUsageDescription
- NSLocationAlwaysUsageDescription(iOS 10 及更早版本)
不要将描述用作键名,这会在最新版本的 Xcode 中引起错误。
我如何做 UI
我以苹果的方式开发了 SPPermission
。为此,我检查了 30 个应用程序以获取该项目的 UI 元素。我拍摄屏幕截图并在 Sketch 中绘制它。例如,允许
按钮类似于 AppStore 中的 获取
按钮。查看 时间流逝 视频以了解我是如何设计 SPPermission
的。
赞助商
通过每月捐款支持我,并帮助我继续活动。付款后,我会将您添加到我的所有项目的 赞助商列表 中,并将您的个人资料链接添加进去。成为赞助商
我的项目
SPStorkController
SPStorkController 是类似于苹果音乐、播客和邮件应用的界面控制器。简单添加关闭按钮和居中箭头指示器。可自定义高度。使用自定义 TransitionDelegate。检查滚动弹跳以获得更多互动。简单添加关闭按钮和居中箭头指示器。您可以从 AppStore 下载示例 Debts - Spending tracker 应用。
在 SPAlert 项目中可以找到警报。如果您想购买预览中应用的源代码,请访问 xcode-shop.com
SPAlert
SPAlert 是类似于苹果音乐和 AppStore 反馈的弹出窗口。包含 完成
和 喜欢
预设。使用绘制路径动画呈现 完成
。我尽可能模仿苹果的警报。
在 AppStore 反馈后或在苹果音乐中添加歌曲到库后,您可以找到这些警报。我还添加了无图标的警报,以简单消息的形式呈现。
您可以从 AppStore 下载示例 Debts - Spending tracker 应用。如果您想预览中应用的源代码,请访问 xcode-shop.com。
SPLarkController
SPLarkController 在控制器之间进行转换。移至顶部。为应用程序创建 设置屏幕。您还可以添加 按钮和开关。单元格数量不限制。您只需用两行代码即可开始使用项目,并轻松进行自定义。有关如何在预览中实现设置,请参阅设置控制器部分。
您可以从 AppStore 下载示例应用 Code - Learn Swift & Design。如果您想购买该应用的源代码,请访问 xcode-shop.com。
许可协议
SPPermission
采用 MIT 许可协议发布。有关详细信息,请参阅 LICENSE.md
文件。