2012-01-02 74 views
0

我正在使用TapkuLibrary其他優秀的TKCalendarDayEventView並試圖選擇性地將視圖中的角落中的一個作爲StuDev demonstrates here。不幸的是,應用StuDev的代碼片段導致EventView完全從其包含的TKCalendarDayTimelineView中消失。我在正確掩蓋CALayers

+ (id)eventViewWithFrame:(CGRect)frame id:(NSNumber *)id startDate:(NSDate *)startDate endDate:(NSDate *)endDate title:(NSString *)title location:(NSString *)location;

方法添加此代碼段當前代碼的下方。我已經註釋掉了代碼,否則它會在代碼中設置邊框寬度,顏色或半徑。我已確保TKCalendarDayEventView沒有任何superlayers,因爲 蘋果文檔警告不要添加蒙版層,superlayers:

當設定面具一個新層,新層的superlayer必須首先設置到零,否則行爲是不確定的。

我也試着玩了maskLayer的backgroundColor和fillColor屬性。我沒有看到TKCalendarDayEventView中的任何內容可能會阻止此掩碼被正確應用。我可能做錯了什麼?

+0

我剛剛推出了一個代碼文件作爲示範什麼是happnening [這裏](https://github.com/aashidham/TapkuCalDemo)。 [有問題的文件在這裏](https://github.com/aashidham/TapkuCalDemo/blob/master/TKCalendarDayEventView.m),從第76行開始到第95行結束。 – Coder 2012-01-02 00:54:14

+0

我下載了您發佈的測試代碼作爲在你的問題下評論。註釋屏蔽代碼(TKCalendarDayEventView.m中的第76-96行)似乎對視圖沒有任何影響,所以看起來問題可能出在別處。是什麼讓你懷疑這段代碼導致了這個問題? – Stuart 2012-01-02 17:03:41

+0

嘿StuDev!謝謝你的幫助! :)你沒有看到視圖差異的原因是因爲時間軸應用程序在2012年1月2日(今天)顯示事件,其中沒有。如果您按下後退箭頭,則可查看視圖中的差異,以查看2012年1月1日的差異。我也推動了回購,以便2012年1月1日默認顯示。拉那個承諾,或去2012年1月1日,你會明白我的意思。 – Coder 2012-01-02 20:57:54

回答

1

如果您在eventViewWithFrame:id:startDate:endDate:title:location:方法中放置斷點,您將看到當您創建事件視圖時,您將幀設置爲CGRectZero。然後設置圓角蒙版的代碼片段使用CGRectZero作爲蒙版圖層的框架。

可能處理這個最簡單的方法是重寫TKCalendarDayEventView就像這樣setFrame:方法:

- (void)setFrame:(CGRect)newFrame 
{ 
    if (!CGRectEqualToRect([super frame], newFrame)) { 
     [super setFrame:newFrame]; 

     // Change the view's mask layer to fit the new frame. 
     UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds 
                 byRoundingCorners:UIRectCornerTopLeft 
                  cornerRadii:CGSizeMake(15.0, 15.0)]; 
     CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
     maskLayer.frame = self.bounds; 
     maskLayer.path = maskPath.CGPath; 
     self.layer.mask = maskLayer; 
    } 
} 

這樣,每次你改變了掩蓋自動調整視圖的框架。

+0

工程就像一個魅力。謝謝! – Coder 2012-01-03 04:26:47