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];

私が期待しているものを手に入れます:

カスタムバッジ

NavigationController を使用しています。別の ViewController にセグエインして戻ってくると、バッジに「テール」が表示されます。

悪い CustomBadge

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 が異なるサイズの rect を使用しているようです。たぶん、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 に答える