1

UISegmentedControlのセグメントの色とフォントサイズを変更したいと考えています。私は、各セグメントのタグを設定して、各セグメントのtintColor:forTag:を設定しています。UISegmentedControl - 色とサイズの変更 - 正常に動作しない

色を変更すると、コントロールをパンするかピンチするまでうまくいきます。 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)]; 
} 

答えて

0

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

私は、TintColorをデフォルトの色に近い色に設定し、これをフライエンドキャップ画像に新規作成しました(私は推測しています)。そして、すべてのフォントスケーリングがうまく機能します。

0

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

+0

TextColorには意味があります。私はそれを確認していないよ、私は、ありがとう、ありがとう。私が問題を抱えている色は、セグメントの色合いです。セグメントのTintColorセグメントがTextAttributes内に隠されていますか? – scooter133

+0

tintが属性にないように見える場合は、tintColor:メソッドを使用してフォントを設定し、setTintColorを使用する必要があります: – valexa

関連する問題