0

我正在使用这个问题中讨论的 CustomBadge 库:如何将徽章添加到标准 UIButton?

这是我的代码:

CustomBadge* customBadge = 
    [CustomBadge customBadgeWithString:@"$2.99"
                       withStringColor:[UIColor whiteColor]
                        withInsetColor:[UIColor redColor]
                        withBadgeFrame:YES
                   withBadgeFrameColor:[UIColor whiteColor]
                             withScale:1.0
                           withShining:NO];
 customBadge.frame = CGRectMake(self.btnUpgrade.frame.size.width - customBadge.frame.size.width + 15, -15, customBadge.frame.size.width, customBadge.frame.size.height);

[self.btnUpgrade addSubview:customBadge];

我得到了我的期望:

自定义徽章

我正在使用导航控制器。当我进入另一个 ViewController 并返回时,我的徽章得到一个“尾巴”:

坏自定义徽章

如果我摆脱 customBadge.frame 线,徽章会正确呈现(虽然在错误的位置)。

代码在 viewWillAppear 上执行:

任何线索可能导致这种情况?

CustomBadge 代码位于:https ://github.com/ckteebe/CustomBadge/blob/master/Classes/CustomBadge.m

4

2 回答 2

1

我想问题出在路径上。所以,要解决它,我会:

  • 检查您是否从您想要的点开始路径,而不是从随机点开始。这意味着您需要在调用CGContextMoveToPoint之前先调用CGContextBeginPath
  • CGContextClosePath在使用之前关闭 ( ) 每个路径。
于 2013-01-28T16:41:44.627 回答
0

当我在上面的代码中更改 customBadge 的框架时,看起来 CustomBadge 的 drawRect 使用了不同大小的矩形。也许它与 clipToBounds 与 maskToBounds 有关。

我添加了这个快速修复:

CustomBadge* customBadge = 
    [CustomBadge customBadgeWithString:@"$2.99"
                       withStringColor:[UIColor whiteColor]
                        withInsetColor:[UIColor redColor]
                        withBadgeFrame:YES
                   withBadgeFrameColor:[UIColor whiteColor]
                             withScale:1.0
                           withShining:NO];

    // copy the graphics of the badge into a UIImage
    UIGraphicsBeginImageContext(customBadge.bounds.size);
    [customBadge.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // position the UIImageView at the top right hand side of the button
    UIImageView* badgeHolder = [[UIImageView alloc] initWithFrame:CGRectMake(self.btnUpgrade.frame.size.width - customBadge.frame.size.width + 15, -15, customBadge.frame.size.width, customBadge.frame.size.height)];

    // put the badge's image in a UIImageView
    [badgeHolder setImage:viewImage];

    [self.btnUpgrade addSubview:badgeHolder];
于 2013-01-29T16:37:49.523 回答