公告 1.3.0

公告 1.3.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2019年9月
SPM支持 SPM

Mitch Treece维护。



公告 1.3.0

Bulletin

Version Swift iOS License

概览

Bulletin 是一个可定制的提醒库,让您能够轻松构建具有高度风格的提醒应用于您的应用程序。

安装

  • Swift 4:版本 <= 1.2.4
  • Swift 5:版本 >= 1.3.0

CocoaPods

Bulletin 集成了 CocoaPods!

  1. 将以下内容添加到您的 Podfile
use_frameworks!
pod 'Bulletin'
  1. 在您的项目目录中,运行 pod install
  2. 在您需要的地方导入 Bulletin 模块
  3. 税费

手动方式

您还可以手动将源文件添加到项目中。

  1. 克隆此 git 仓库
  2. Bulletin/ 子目录中的所有 Swift 文件添加到您的项目中
  3. 税费

基础知识

公布通报的一般流程如下

let contentView = UIView()

let bulletin = BulletinView()
bulletin.embed(content: contentView)
bulletin.present()

您创建一个内容视图,稍后将其嵌入到含有的 BulletinView 中。然后我们创建一个 BulletinView 并配置其样式,嵌入我们的内容,并展示通报。

BulletinView 将使用您视图的内禀内容大小来确定其在屏幕上的高度。因此,请确保您已正确设置约束!或者,如果您想为您的降噪提供静态高度,请使用以下版本的 embed() 函数

bulletin.embed(content: contentView, usingStrictHeight: 100)

默认样式

BulletinView 许多 customization options; 由于这个原因,它包括为最常见用例提前配置的样式。当前的默认样式包括

  • 通知
  • 横幅
  • 状态栏(吐司)
  • 警报
  • HUD
  • 表格

您可以使用以下任一默认样式创建通报

let bulletin = BulletinView.notification()
let bulletin = BulletinView.banner()
...

定制

当然,您可能想随心所欲地调整一切。以下是一些您可以更改的示例

let bulletin = BulletinView()

// Basic options

bulletin.position = .top
bulletin.duration = .limit(5)
bulletin.soundEffectUrl = URL(...)

// Presentation

bulletin.presentationAnimation.duration = 0.4
bulletin.presentationAnimation.springDamping = 0.7
bulletin.presentationAnimation.springVelocity = 0.4

// Style

bulletin.style.statusBar = .lightContent
bulletin.style.backgroundEffect = .darken(alpha: 0.5)
bulletin.style.edgeInsets = UIEdgeInsets(horizontal: 8, vertical: 24)
bulletin.style.roundedCorners = .allCorners
bulletin.style.roundedCornerRadius = 4
bulletin.style.shadowColor = UIColor.black
bulletin.style.shadowOffset = CGSize(width: 0, height: 4)
bulletin.style.shadowRadius = 4
bulletin.style.shadowAlpha = 0.25
bulletin.style.isBackgroundDismissEnabled = true

// Taptics

bulletin.taptics.presentation = .notification(.success)
bulletin.taptics.action = .impact(.light)
bulletin.taptics.snapping = .impact(.medium)

等等。有关特定配置选项的使用,请参阅代码文档。

操作

当有人在您的通报上轻点时,您可能想执行一些酷炫的动作。BulletinView有一个可选的 action 处理器,正好用于此!

let bulletin = BulletinView()
bulletin.action = {
    print("You tapped me!")
}

当调用动作处理程序时,通报将自动消失。

外观代理

公告视图还可以有一个可选的外观代理,它提供了有关公告何时以及如何展示/关闭的信息。代理包括以下功能

func bulletinViewWillAppear(_ bulletin: BulletinView)
func bulletinViewWillDisappear(_ bulletin: BulletinView)
func bulletinViewWasAutomaticallyDismissed(_ bulletin: BulletinView)
func bulletinViewWasInteractivelyDismissed(_ bulletin: BulletinView)

SnapKit

SnapKit是一个优秀的库,可以帮助简化使用程序化布局约束的痛苦。我每天都在使用它,你也应该使用!公告通过一个专门的snp_embed()函数提供了基本的SnapKit集成,该函数接受SnapKit的ConstraintItem,而不是严格的宽度。

bulletin.snp_embed(content: contentView, usingStrictHeightConstraint: anotherView.snp.height)

Objective-C

公告对Objective-C的支持有限。创建和展示公告与在Swift中执行的方式完全一样

@import Bulletin;

UIView *content = [[UIView alloc] init];
content.backgroundColor = [UIColor whiteColor];

BulletinView *bulletin = [[BulletinView alloc] init];
[bulletin setAppearanceDelegate:self];
[bulletin embedContent:content usingStrictHeight:120.0f];
[bulletin present];

使用Objective-C时,公告不支持高级样式选项。然而,基本展示选项都是可用的

BulletinView *bulletin = [[BulletinView alloc] init];
[bulletin setPosition:kBulletinViewPositionTop];
[bulletin setDuration:5];
[bulletin setLevel:kBulletinViewLevelDefault];
[bulletin setEdgeInsets:UIEdgeInsetsMake(8, 8, 8, 8)];
[bulletin setBackgroundEffect:kBulletinViewBackgroundEffectDarkenMedium];
[bulletin embedContent:contentView];
[bulletin present];

如果你需要更多高级样式选项,你可以创建一个简单的Swift工场类或者为BulletinView创建一个扩展,返回配置齐全的公告

class BulletinFactory {

    static func sexyBulletin() -> BulletinView {

        let bulletin = BulletinView()
        bulletin.position = .bottom
        bulletin.style.edgeInsets = UIEdgeInsets(horizontal: 0, vertical: 8)
        bulletin.style.backgroundEffect = .darken(alpha: 0.5)

        ...

        return bulletin

    }

}

extension BulletinView {

    static func sexy() -> BulletinView {

        let bulletin = BulletinView()
        bulletin.position = .bottom
        bulletin.style.edgeInsets = UIEdgeInsets(horizontal: 0, vertical: 8)
        bulletin.style.backgroundEffect = .darken(alpha: 0.5)

        ...

        return bulletin

    }

}

贡献

欢迎提交拉取请求。修复错误?添加新功能?打开一个PR,我们会将其合并!