1

我使用 TapkuLibrary 作为我的日历。我想更改事件标记,例如在一个月的某些日子显示不同的操作。我想实现类似第二张图片的效果。

默认 TapkuLibrary 日历

默认 TapkuLibrary 日历

我想喜欢这样的东西

我想喜欢这样的东西

4

2 回答 2

3

注意 我首先要解释 Tapku 当前是如何绘制它的 MonthView 标记的,然后我会提出一种改变它的方法。

Tapku 实际上并没有将这些标记设置为图像。它将它们设置为字符串!在 TKCalendarMonthView 中搜索 •。标记设置在 TKCalendarMonthView 中的两个不同位置:首先,在 drawTileInRect:day:mark:font... 方法中,该方法在 drawRect 方法中对每个图块单独调用。其次,使用属性“点”,它应用于用户的“选定”单元格,具有不同的文本颜色等,因此需要调整自己的属性。

要设置自己的图像,您必须在这两个地方修改 Tapku(不是很困难;这是一个非常容易访问的项目)。因此,您必须将其图像设置为您提供的图像,而不是将单元格的文本设置为 •。

可以通过几种不同的方式提供此图像。最直接的方法是重做 Tapku 的“标记”数组(由委托设置)的概念。您可以创建一个 UIImage 数组,而不是创建一个整数数组。不过,您需要有一种方法来告诉代码“没有图像”——也许有一个空白图像并默认将其应用于单元格?

如果您需要任何澄清,请告诉我。

于 2012-07-20T11:24:53.703 回答
2

使用波纹管方法代替 - DrawTileInRect 在一个月内获得多种颜色,检查日期

- (void) drawTileInRect:(CGRect)r day:(int)day mark:(BOOL)mark font:(UIFont*)f1 font2:(UIFont*)f2 sysFlag:(int)sysFlg userEventFlg:(int)userEventFlag diaryFlg:(int)diaryFlag momentsFlg:(int)momentsFlag
{
   
    @try {
        
        NSString *str = [NSString stringWithFormat:@"%d",day];
        [str retain];
        
        
        r.size.height -= 2;
        [str drawInRect: r
               withFont: f1
          lineBreakMode: UILineBreakModeWordWrap
              alignment: UITextAlignmentCenter];
        
        r.size.height = 10;
        r.origin.y += 18;
        
        CGRect y=CGRectMake(r.origin.x+5, r.origin.y-25, 12, 12);//5 5
        
        
        CGRect rect1=CGRectMake(r.origin.x, r.origin.y+7, 12, 12);
        CGRect rect2=CGRectMake(rect1.origin.x+18, r.origin.y+7, 12, 12);
        CGRect rect3=CGRectMake(rect2.origin.x+16, r.origin.y+7, 12, 12);
        
        if(sysFlg==1)
        {
            [[UIImage imageNamed:@"Blue_dot.png"] drawInRect:y];
        }
        
        if(userEventFlag==1)//1.png
        {
            [[UIImage imageNamed:@"Yellow_dot.png"] drawInRect:rect1];
        }
        
        
        if(momentsFlag==1)//3.png
        {
            [[UIImage imageNamed:@"Red_dot.png"] drawInRect:rect3];
        }
        

    }
    @catch (NSException * e) {
        NSLog(@"Exception: %@", e);

    }
}
于 2013-02-08T08:59:24.693 回答