2017-03-18 3 views
0

Je suis un débutant, en essayant de faire ma première application. Je voudrais changer la taille d'un objet (bezierpath) (?) Fait par PaintCode en recevant une valeur d'un UISlider. Quelqu'un peut-il m'aider ce qui ne va pas avec mon code ci-dessous et comment le faire fonctionner?Comment changer la taille de l'objet produit PaintCode

int heightOfBubble = 120; 

- (IBAction)widthOfBubble:(id)sender { 
NSLog(@"slider value = %f", self.slider.value); 
[slider addTarget:self action:@selector(drawRect:) forControlEvents:UIControlEventValueChanged]; 
} 


- (void)drawRect:(CGRect)rect { 
label.text = [NSString stringWithFormat:@"%f", self.slider.value]; 
NSLog(@"slider value = %f", self.slider.value); 
[BubbleText10 drawBubbleButtonWithText2:@"안개비 조명은 하예 흔들리는 내 몸을 감싸고~~ 술에 취에 비틀거리는 하~예 나의 모습 이제는 싫어~ 삐리비립" number:12 numberOfWidth:widthOfBubble numberOfHeight:heightOfBubble condition: NO]; 

Et j'ai l'erreur suivante;

Mar 19 00:55:45 BubbleText03[44457] <Error>: CGContextRestoreGState: invalid context 0x0. Backtrace: 
    <+[BubbleText10 drawBubbleButtonWithText2:number:numberOfWidth:numberOfHeight:condition:]+4941> 
    <-[BubbleView drawRect:]+421> 
    <-[UIApplication sendAction:to:from:forEvent:]+83> 
    <-[UIControl sendAction:to:forEvent:]+67> 
     <-[UIControl _sendActionsForEvents:withEvent:]+444> 
     <-[UISlider endTrackingWithTouch:withEvent:]+255> 
     <-[UIControl touchesEnded:withEvent:]+620> 
     <-[UIWindow _sendTouchesForEvent:]+2747> 
      <-[UIWindow sendEvent:]+4011> 
      <-[UIApplication sendEvent:]+371> 
      <__dispatchPreprocessedEventFromEventQueue+3248> 
      <__handleEventQueue+4879> 
       <__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__+17> 
       <__CFRunLoopDoSources0+556> 
       <__CFRunLoopRun+918> 
       <CFRunLoopRunSpecific+420> 
        <GSEventRunModal+161> 
        <UIApplicationMain+159> 
        <main+111> 
        <start+1> 

Merci beaucoup à l'avance.

Répondre

0

Au lieu de @selector(drawRect:), utiliser @selector(setNeedsDisplay).


Documentation:

- (void)drawRect:(CGRect)rect; 

... Cette méthode est appelée lorsqu'un premier point de vue est affiché ou lorsque se produit un événement qui invalide une partie visible de la vue. Vous ne devriez jamais appeler cette méthode directement vous-même. Pour invalider une partie de votre vue et ainsi provoquer le redessin de cette partie, appelez plutôt la méthode setNeedsDisplay ou setNeedsDisplayInRect:.

Même si elle dit directement vous et vous n'êtes pas appeler vous-même directement, il est toujours en vigueur à votre cas.

- PaintCode soutien

+0

Cela a fonctionné comme un charme! Merci beaucoup de partager votre talent !! – Lee