如何确定EKCalendar是Facebook日历?

时间:2013-02-02 10:50:08

标签: ios eventkit

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

2 个答案:

答案 0 :(得分:8)

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

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

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

可以用于facebook生日活动!

答案 1 :(得分:1)

EventKit中仍然没有公共API,但是只有公共方法才有解决方法。

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

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

我写了一个快速扩展到UIColor来检查给定颜色是否为Facebook Blue(完成辅助函数以使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
    }