1

Я хочу, чтобы иметь возможность изменять цвета и размер шрифта сегментов UISegmentedControl. Я устанавливаю тег для каждого сегмента, а затем устанавливаю tintColor: forTag: для каждого из сегментов.UISegmentedControl - Изменение цвета и размера - Не работает Right

Изменение цвета отлично работает, пока я не нажму кнопку управления или не зацепите его. В коде 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]; 
}  
} 

// Pinch Жест

-(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 сегментов. Является ли сегмент TintColor сегмента скрытым внутри TextAttributes? – scooter133

+0

выглядит как оттенок не в атрибутах, вам нужно будет использовать метод tintColor: для их получения, установите шрифт, затем используйте setTintColor: – valexa