0

我正在使用 TapkuLibrary 在其他方面非常出色的TKCalendarDayEventView,并尝试像StuDev 在这里演示的那样有选择地绕过视图中的一个角。不幸的是,应用 StuDev 的代码片段会导致 EventView 完全从其包含的 TKCalendarDayTimelineView 中消失。我在当前代码下方添加此代码片段

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

方法。我已经注释掉了在代码中设置边框宽度、颜色或半径的代码。我已确保 TKCalendarDayEventView 没有任何超级层,因为苹果文档警告不要向具有超级层的层添加蒙版:

将遮罩设置为新图层时,必须先将新图层的超图层设置为 nil,否则行为未定义。

我也尝试过使用 maskLayer 的 backgroundColor 和 fillColor 属性。我在 TKCalendarDayEventView 中看不到任何可能阻止正确应用此掩码的内容。我可能做错了什么?

4

1 回答 1

1

如果在eventViewWithFrame:id:startDate:endDate:title:location:方法中设置断点,您将看到在创建事件视图时将框架设置为CGRectZero. 然后设置圆角遮罩的代码片段CGRectZero用作遮罩层的框架。

处理这个问题的最简单方法可能是像这样覆盖TKCalendarDayEventView'ssetFrame:方法:

- (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;
    }
}

这样,每次您更改视图的框架时,蒙版都会自动调整。

于 2012-01-02T21:55:12.270 回答