美文网首页
如何在 mac 上使用toast

如何在 mac 上使用toast

作者: _我和你一样 | 来源:发表于2019-07-06 17:31 被阅读0次

    如何在 mac 上使用toast

    在移动设备上 toast 是一种很常见的提醒,出现之后在很短的一段时间内消失。

    在 macOS 上,我们也可以做到类似的效果。

    1. 首先,我们需要一个视图,我们可以用 xib 自定义一个视图,也可以直接用代码写一个视图。

    我们自定义一个视图,此视图就是最终展示出来的视图模板。

    1. 将视图添加到需要展示的View上,可以给 NSView 写一个扩展,这样所有基于 NSView 的实例都可以调用
    2. 给视图属性赋值,并做适当的大小自适应
    3. 执行动画,让其在1s 之后移除
    import Cocoa
    
    extension NSView {
        
        func showToast(with content:String, imageName:String?,completion:(()->Void)? = nil) {
          //1. 自定义toast视图:这里使用 xib 自定义的toast 视图,也可以用代码自定义视图
            let nib = NSNib.init(nibNamed: "ToastView", bundle: nil)
            var array:NSArray?
            nib?.instantiate(withOwner: self, topLevelObjects: &array)
            
            var toastView:ToastView?
            if let arr = array {
                for obj in arr {
                    if obj is ToastView {
                        toastView = obj as? ToastView
                        break
                    }
                }
            }
           //2. 给自定义视图赋值 自定义的 toast 中含有图标和文本
            if let toast = toastView{
                if let name = imageName ,let image = NSImage(named: name) {
                    toast.imageView.image = image
                    toast.imageView.isHidden = false
                }else {
                    toast.imageView.isHidden = true
                }
                toast.titleLabel.stringValue = content
              // 3. 自适应大小
                toast.titleLabel.sizeToFit()
                if toast.bounds.width <= toast.titleLabel.bounds.width + 10 {
                    toast.frame = NSRect(origin: CGPoint.zero, size: CGSize(width: toast.titleLabel.bounds.width + 10, height: toast.bounds.height))
                }
                toast.frame.origin = CGPoint(x: (bounds.width - toast.bounds.width)/2, y: (bounds.height - toast.bounds.height)/2)
                addSubview(toast)
              // 4. 执行 toast 动画
                NSAnimationContext.runAnimationGroup({ (context) in
                    context.duration = 1
                    toast.animator().alphaValue = 1
                }) {
                  toast.animator().alphaValue = 0
                  toast.removeFromSuperview()
                  completion?()
                }
            }
        }
        
        func showToast(_ string:String) {
            self.showToast(with: string, imageName: nil)
        }
        
    }
    

    相关文章

      网友评论

          本文标题:如何在 mac 上使用toast

          本文链接:https://www.haomeiwen.com/subject/xrcmhctx.html