3

鉴于 any EKCalendar,我如何检查此日历是否为 Facebook 日历?Facebook 日历可以是 Facebook 活动日历或 Facebook 生日日历。

4

2 回答 2

8

不幸的是,如果不使用私有 API,就无法判断特定日历是否为 facebook 日历。
我在 iOS 6 测试版期间提交了一份错误报告,一位 Apple 工程师告诉我他们会在最终版本中修复它,但事实证明他们没有……

但是,您可以测试特定事件是否是 facebook 事件:

BOOL isFacebookEvent = [[event.URL host] hasSuffix:@"facebook.com"];

不过,这不适用于Facebook 生日活动!

于 2013-02-02T11:19:45.530 回答
1

EventKit 中仍然没有用于此的公共 API,但有一个仅使用公共方法的解决方法。

每个日历都有一个颜色属性:ekCalendar.CGColor

Facebook 活动日历的颜色是 Facebook Blue,因此通过比较日历颜色的 rbg 组件,可以确定日历最有可能来自 Facebook。

我写了一个 UIColor 的快速扩展来检查给定的颜色是否是 Facebook 蓝色(完成了帮助函数,使 UIColor rgb 函数更迅速)

extension UIColor {

    struct rgbComponents {
        var red : CGFloat
        var green : CGFloat
        var blue : CGFloat
        var alpha : CGFloat
    }

    func toComponents()->rgbComponents {
        var r:CGFloat = 0
        var g:CGFloat = 0
        var b:CGFloat = 0
        var a:CGFloat = 0

        var components : rgbComponents

        if self.getRed(&r, green: &g, blue: &b, alpha: &a) {
            components = rgbComponents(red: r, green: g, blue: b,  alpha: a)
        } else {
            components = rgbComponents(red: 0, green: 0, blue: 0, alpha: 0)
        }

        return components
    }

    func isFBBlue()->Bool {
        let c = self.toComponents()
        let result = c.red == 0.18823529779911041
                        &&  c.green == 0.39215686917304993
                        &&  c.blue == 0.7137255072593689
                        &&  c.alpha == 1.0
        return result
    }
于 2015-02-07T10:01:47.990 回答