colorWithPatternImage и setCornerRadius выпускают - PullRequest
2 голосов
/ 08 октября 2010

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

[triggerView setFrame:CGRectMake(0, 0, ICONS_WIDTH, iconFrameHeight)];
[triggerView.layer setCornerRadius:borderRadius];
[triggerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]]];;

Я не знаю почему, но triggerView теряет настройку CornerRadiusкогда я добавлю последнюю строку.triggerView - это UIView, созданный с помощью построителя интерфейса и программно модифицированный в superView viewDidLoad с помощью приведенного выше кода.

Где я ошибаюсь?

РЕДАКТИРОВАТЬ: я неупомянул, что если я использую простой UIColor вроде: [UIColor orangeColor] Это хорошо работает.Так что это что-то связанное с patternImage.

РЕДАКТИРОВАТЬ: я пробовал также этот код, работая на фоне слоя моего зрения:

[triggerView setFrame:CGRectMake(0, 0, ICONS_WIDTH, iconFrameHeight)];
triggerView.backgroundColor = [UIColor clearColor];
UIImage *img = [UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE];
triggerView.layer.backgroundColor = [UIColor colorWithPatternImage:img].CGColor;
triggerView.layer.cornerRadius = radius;
[img release];
[self.view addSubview:triggerView];

Теперь я получаю прозрачныйфон, но углы закруглены;

Ответы [ 3 ]

4 голосов
/ 09 октября 2010

ОК, благодаря комментарию Бена и этой записи в блоге Я нашел это решение:

 [triggerView setFrame:CGRectMake(0, 0, ICONS_WIDTH, iconFrameHeight)];
 triggerView.layer.masksToBounds = YES;
 triggerView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]];
 triggerView.layer.cornerRadius = radius;
 [self.view addSubview:triggerView];

Кажется, что triggerView.layer.masksToBounds = YES; был недостающим фрагментом, но я все еще не понимаю, * одного только 1007 * недостаточно.

1 голос
/ 08 октября 2010

В iOS SDK 4.0 и 4.1 метод colorWithPatternImage содержит ошибку, которая плохо отображает изображение ...
Я использовал этот метод, и у меня была эта ошибка, но я мог устранить ее другим методом ...
Попробуйте использовать initWithPatternImage метод UIColor класса:

UIColor *imageBg = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]];

Это очень хорошо для меня ...

К сожалению, я никогда не использовал cornerRadius метод, и я неНе знаю возможного решения этой другой проблемы.

1 голос
/ 08 октября 2010

Попробуйте установить свойство содержимого слоя с помощью CGImageRef изображения:

triggerView.layer.contents = (id) [[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE] CGImage];

Возможно, вам придется выделить или сохранить UIImage, чтобы предотвратить его автоматический выпуск ...

...