Question

Je veux pouvoir changer les couleurs et la taille de la police des segments d'un UisegmentEdControl. Je définis la balise pour chaque segment, puis je définis le tintcolor: FORTAG: pour chacun des segments.

Changer les couleurs fonctionne très bien, jusqu'à ce que je passe le contrôle ou que je le pince. Dans le code UIPinChgesturerCognizer, j'ai défini les TitleTextTRIBUTES pour avoir une taille de police différente. Lorsque je fais cela, les couleurs des segments reviennent à la couleur Gary par défaut.

- (void)createElement {
if (multiStateControl == nil) {

        //Make our new switch
        //multiStateControl = [UIButton  buttonWithType:UIButtonTypeCustom];

    multiStateControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Off State Button", @"On State Button", nil]];

     multiStateControl.segmentedControlStyle = UISegmentedControlStyleBar;

    [multiStateControl setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIFont boldSystemFontOfSize:12.0f], UITextAttributeFont, 

      nil] 
                                     forState:UIControlStateNormal]; 

     [multiStateControl setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 30.0f)];

        // Set up the Contents Frame to the same origin as what we were but set the height/width to the new control.
    [elementViewContents setFrame:CGRectMake(elementViewContents.frame.origin.x, 
                                             elementViewContents.frame.origin.y, 
                                             CGRectGetWidth(multiStateControl.frame), 
                                             CGRectGetHeight(multiStateControl.frame))];


        //Set initial use to disabled
    [multiStateControl setOpaque:NO];
        // Set the default title for the button
            [multiStateControl setTag:kTagOffState forSegmentAtIndex:0];
            [multiStateControl setTag:kTagOnState forSegmentAtIndex:1];
            [multiStateControl setTintColor:onColor forTag:kTagOnState];
        [multiStateControl setTintColor:offColor forTag:kTagOffState];  

        // Lets get it on the screen
    [elementViewContents addSubview:multiStateControl];
   [multiStateControl release];

    [self contentSizeChanged];
}       
}

// Pinchez un geste

-(void) pinchElement:(UIPinchGestureRecognizer *)gestureRecognizer  {

    UIFont *existingFont = [[multiStateControl titleTextAttributesForState:UIControlStateNormal] objectForKey:UITextAttributeFont];

    CGFloat existingFontSize = [existingFont pointSize];
    CGFloat newFontSize = existingFontSize * [gestureRecognizer scale] ;

    [multiStateControl setTitleTextAttributes:
          [NSDictionary dictionaryWithObjectsAndKeys:
          [UIFont boldSystemFontOfSize:newFontSize],
          UITextAttributeFont, nil] 
                                     forState:UIControlStateNormal]; 

    [multiStateControl setFrame:CGRectMake(multiStateControl.frame.origin.x, multiStateControl.frame.origin.y, multiStateControl.frame.size.width+20,newFontSize *1.8)];
}
Était-ce utile?

La solution 2

Cela semble se produire lorsque je ne définis pas le tintcolor, puis augmente la taille de la police des textAttributes. C'est comme si la couleur par défaut utilise une image standard pour les bouchons d'extrémité. Lorsque j'augmente la police, le contrôle augmente, puis les extrémités semblent étirées. Un collègue a mentionné les bouchons d'extrémité comme sur un bouton. Il semble que les applications finales soient étirées pour s'adapter à la nouvelle taille de contrôle.

Mon travail était de régler le tintcolor sur une couleur qui est proche de la couleur par défaut, ce qui a créé une nouvelle image de capuchon de fin sur la mouche (je suppose) et toute la mise à l'échelle des polices fonctionne très bien.

Autres conseils

Ensuite, vous devez préserver les attributs de couleur, les récupérer avant de définir la nouvelle police et de les remettre à nouveau après l'avoir réglé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top