1

UISegmentedControl のセグメントの色とフォント サイズを変更できるようにしたいと考えています。各セグメントにタグを設定してから、各セグメントに tintColor: forTag: を設定しています。

コントロールをパンまたはピンチするまで、色の変更はうまく機能します。UIPinchGestureRecognizer コードでは、titleTextAttributes を別のフォント サイズに設定しました。これを行うと、セグメントの色がデフォルトの Gary Color に戻ります。

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

//ピンチジェスチャー

-(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)];
}
4

2 に答える 2

0

次に、色属性を保持し、新しいフォントを設定する前にそれらを取得し、設定後に再度設定する必要があります。

于 2012-02-28T18:29:58.157 に答える
0

これは、TintColor を設定せずに textAttributes のフォント サイズを大きくすると発生するようです。デフォルトの色がエンド キャップに標準的なイメージを使用しているようです。フォントを大きくすると、コントロールが大きくなり、端が伸びて見えます。同僚は、ボタンのようなエンド キャップについて言及しました。新しいコントロール サイズに合わせてエンド アプリが引き伸ばされているようです。

私の回避策は、TintColor をデフォルトの色に近い色に設定することでした。これにより、その場で新しいエンド キャップ イメージが作成され (推測しています)、すべてのフォント スケーリングがうまく機能します。

于 2012-03-06T04:56:34.993 に答える