Как закруглить один угол изменяемого размера UIView в IOS?
Я использую этот код, чтобы закруглить один угол моего:UIView
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:
self.view.bounds byRoundingCorners:(UIRectCornerTopLeft) cornerRadii:
CGSizeMake(10.0, 10.0)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.view.bounds;
maskLayer.path = maskPath.CGPath;
self.view.layer.mask = maskLayer;
self.view.layer.masksToBounds = NO;
Этот код работает, пока я неникогда не меняй вид. Если я увеличу вид, новая область не появится, потому чтоs выходит за границы слоя маски (этот слой маски не изменяет размеры автоматически при просмотре). Я мог бы просто сделать маску такой большой, какой ей когда-либо понадобится, но на iPad она может быть полноэкранной, поэтому яя беспокоюсь о производительности с такой большой маской (ябудет иметь более одного из них в моем пользовательском интерфейсе). Кроме того, суперразмерная маска нене работает для ситуации, когда мне нужен верхнийправо угол (один) должен быть закруглен.
Есть ли более простой способ добиться этого?
Обновить: вот что яЯ пытаюсь достичь:http://i.imgur.com/W2AfRBd.png (округленный угол, который я хочу, обведен здесь зеленым цветом).
Я достиг рабочей версии этого, используя подклассUINavigationController
и переопределениеviewDidLayoutSubviews
вот так:
- (void)viewDidLayoutSubviews {
CGRect rect = self.view.bounds;
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:rect
byRoundingCorners:UIRectCornerTopLeft cornerRadii:CGSizeMake(8.0, 8.0)];
self.maskLayer = [CAShapeLayer layer];
self.maskLayer.frame = rect;
self.maskLayer.path = maskPath.CGPath;
self.view.layer.mask = self.maskLayer;
}
Затем я создаю свой экземплярUINavigationController
подкласс с моим контроллером представления, а затем я смещу кадр контроллера Nav 's на 20px (y) откройте строку состояния и оставьте панель навигации высотой 44 пикселя, как показано на рисунке.
Код работает, за исключением того, что он нене очень хорошо справляется с вращением. Когда приложение вращается,viewDidLayoutSubviews
вызываетсядо вращение и мой код создает маску, которая соответствует видупосле вращение; это создает нежелательную блокировку вращения, когда биты, которые должны быть скрыты, выставляются во время вращения. Кроме того, тогда как приложениеБез этой маски вращение идеально плавное, а при создании маски вращение становится заметно рывковым и медленным.
Приложение для iPad Evomail также имеет закругленные углы, как это, и их приложение страдает от той же проблемы.