UISegmentedControl - Изменение цвета и размера - Не работает правильно - PullRequest
1 голос
/ 28 февраля 2012

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

Изменение цвета прекрасно работает, пока я не сдвину элемент управления или не урежу его. В коде UIPinchGestureRecognizer я установил для titleTextAttributes другой размер шрифта. Когда я делаю это, Цвета Сегментов возвращаются к стандартному цвету Гэри.

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

Ответы [ 2 ]

0 голосов
/ 06 марта 2012

Это происходит, когда я не устанавливаю TintColor, а затем увеличиваю размер шрифта textAttributes.Это похоже на цвет по умолчанию, использующий стандартное изображение для заглавных букв.Когда я увеличиваю шрифт, элемент управления растет, а затем концы выглядят растянутыми.Коллега упомянул заглушки как на кнопке.Похоже, что конечные приложения растягиваются, чтобы соответствовать новому размеру элемента управления.

Моя работа заключалась в том, чтобы установить для цвета TintColor цвет, близкий к цвету по умолчанию, при этом был создан новый элемент на летной крышке.изображение (я предполагаю), и все масштабирование шрифта прекрасно работает.

0 голосов
/ 28 февраля 2012

Затем вы должны сохранить цветовые атрибуты, получить их до установки нового шрифта и установить их снова после установки.

...