5

授業UIBezierpathで使っている吹き出しを描いています。UIViewビュー クラスには、UITextView が含まれています。吹き出しを描画するために使用する次のコードを使用しています。

//BezierPathView.h

@interface BezierpathView :  UIView<UITextViewDelegate>{

CGFloat animatedDistance;

UITextView *LXVolabel;
UIView *view;
UIBezierPath* speechBubbleTopPath;
UIBezierPath* rectanglePath;
UIBezierPath* speechBubbleBottomPath;
UIColor* darkGray;
UIColor* shadow;
CGSize shadowOffset;
CGFloat shadowBlurRadius;
NSString* textContent;
}
 @property(nonatomic,strong)UIView *view;
 @property(nonatomic,strong)UITextView *LXVolabel;

//BezierPath.m

@implementation BezierpathView
@synthesize LXVolabel,view;
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
    self.backgroundColor = [UIColor clearColor];
    self.LXVolabel = [[UITextView alloc]initWithFrame:CGRectMake(0, 0,self.frame.size.width , self.frame.size.height-10)];
    self.LXVolabel.backgroundColor = [UIColor clearColor];
    self.LXVolabel.delegate = self;
    self.LXVolabel.font = [UIFont systemFontOfSize:20];

    [self addSubview:self.LXVolabel];

    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
    view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, applicationFrame.size.width, applicationFrame.size.height)];


    // Color Declarations
    darkGray = [UIColor grayColor];

    // Shadow Declarations
    shadow= [UIColor blackColor];
    shadowOffset= CGSizeMake(0, 1);
    shadowBlurRadius= 1;

    // Abstracted Graphic Attributes
    textContent= LXVolabel.text;

}
return self;
}
 - (void)drawRect:(CGRect)rect
 {
[super drawRect:rect];
  CGContextRef  context = UIGraphicsGetCurrentContext();

   // Drawing code

//// General Declarations

// speechBubbleTop Drawing
speechBubbleTopPath = [UIBezierPath bezierPath];
[speechBubbleTopPath moveToPoint: CGPointMake(294, 7)];
[speechBubbleTopPath addCurveToPoint: CGPointMake(288, -0) controlPoint1: CGPointMake(294, 3.13) controlPoint2: CGPointMake(291.31, -0)];
[speechBubbleTopPath addLineToPoint: CGPointMake(8, -0)];
[speechBubbleTopPath addCurveToPoint: CGPointMake(2, 7) controlPoint1: CGPointMake(4.69, -0) controlPoint2: CGPointMake(2, 3.13)];
[speechBubbleTopPath addLineToPoint: CGPointMake(294, 7)];
[speechBubbleTopPath closePath];
[darkGray setFill];
[speechBubbleTopPath fill];



  // Rectangle Drawing
  rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(2, 6, 292,self.frame.size.height-15)];
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
[darkGray setFill];
[rectanglePath fill];
CGContextRestoreGState(context);



// Text Drawing
CGRect textRect = CGRectMake(7, 6, 292, self.frame.size.height-15);
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
[[UIColor whiteColor] setFill];
[textContent drawInRect: textRect withFont: [UIFont fontWithName: @"Helvetica-Light" size: 14] lineBreakMode: NSLineBreakByWordWrapping alignment: NSTextAlignmentLeft];
//CGContextRestoreGState(context);

float addedHeight = 100 -38;

[self drawPath:addedHeight contextValue:context];
//speechBubbleBottom Drawing


speechBubbleBottomPath = [UIBezierPath bezierPath];
[speechBubbleBottomPath moveToPoint: CGPointMake(2, 24+addedHeight)];
[speechBubbleBottomPath addCurveToPoint: CGPointMake(8, 30+addedHeight) controlPoint1: CGPointMake(2, 27.31+addedHeight) controlPoint2: CGPointMake(4.69, 30+addedHeight)];
[speechBubbleBottomPath addLineToPoint: CGPointMake(13, 30+addedHeight)];
[speechBubbleBottomPath addLineToPoint: CGPointMake(8, 42+addedHeight)];
[speechBubbleBottomPath addLineToPoint: CGPointMake(25, 30+addedHeight)];
[speechBubbleBottomPath addLineToPoint: CGPointMake(288, 30+addedHeight)];
[speechBubbleBottomPath addCurveToPoint: CGPointMake(294, 24+addedHeight) controlPoint1: CGPointMake(291.31, 30+addedHeight) controlPoint2: CGPointMake(294, 27.31+addedHeight)];
[speechBubbleBottomPath addLineToPoint: CGPointMake(2, 24+addedHeight)];
[speechBubbleBottomPath closePath];
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
[darkGray setFill];
[speechBubbleBottomPath fill];
CGContextRestoreGState(context);

}
 -(void)textViewDidChange:(UITextView *)textView{
CGRect rect = textView.frame;
rect.size.height = textView.contentSize.height;// Adding.size Since height is not a member of CGRect
  self.frame = CGRectMake(10, 20, textView.frame.size.width, textView.contentSize.height+20);
   textView.frame = rect;
 }

私の考えでは、テキスト ビューにテキストを入力したときに、テキスト ビューのテキストに基づいて吹き出しのサイズを大きくしたいと考えています。しかし、吹き出しのサイズが正しく拡大されません。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

テキストが変更されたときに再描画をトリガーしていますか?

textViewDidChange メソッドに追加...

[self setNeedsDisplay];

...最後の行として。

これにより、 drawRect メソッドが再びトリガーされます。

于 2012-11-27T09:02:56.040 に答える