Como é uma visão retangular com transparência feita no iphone?

Muitos aplicativos exibem uma visualização transparente com cantos arredondados e um activityIndicator ao executar uma operação demorada.

Como esse arredondamento é feito e é possível fazer isso apenas usando o Interface Builder (como há muitos lugares que eu gostaria de usar algo assim)? Ou devo usar uma imageview com um retângulo arredondado ou uma imagem elástica? Preciso desenhar o plano de fundo eu mesmo?

Até agora, consegui obter uma visão básica com transparência semelhante, definindo o alphaValue no Interface Builder, no entanto, ele não tem cantos arredondados, e também a transparência parece se aplicar a todas as subvisualizações (eu não quero o text e o activityindicator para ser transparente, no entanto, mesmo que eu defina o alphaValue em IB, ele parece ser ignorado).

A partir do iPhone SDK 3.0, você pode simplesmente usar a propriedade cornerRadius da camada. Por exemplo:

 view.layer.cornerRadius = 10.0; 

Na mesma linha, você pode alterar a cor e a largura da borda da exibição:

 view.layer.borderColor = [[UIColor grayColor] CGColor]; view.layer.borderWidth = 1; 

Eu abstraí a resposta de @ lostInTransit nesta function:

 static void ContextAddRoundedRect(CGContextRef c, CGRect rect, CGFloat radius) { CGFloat minX = CGRectGetMinX(rect); CGFloat maxX = CGRectGetMaxX(rect); CGFloat minY = CGRectGetMinY(rect); CGFloat maxY = CGRectGetMaxY(rect); CGContextMoveToPoint(c, minX + radius, minY); CGContextAddArcToPoint(c, maxX, minY, maxX, minY + radius, radius); CGContextAddArcToPoint(c, maxX, maxY, maxX - radius, maxY, radius); CGContextAddArcToPoint(c, minX, maxY, minX, maxY - radius, radius); CGContextAddArcToPoint(c, minX, minY, minX + radius, minY, radius); } 

que coloca o caminho para o contexto para você fazer como você pode

chamadas CoreGraphics levemente diferentes e eu não fechei o caminho, caso você queira adicionar

 CGContextFillPath(c); 

Na sua opinião, faça isso no método drawRect

 float radius = 5.0f; CGRect rect = self.bounds; CGContextRef context = UIGraphicsGetCurrentContext(); rect = CGRectInset(rect, 1.0f, 1.0f); CGContextBeginPath(context); CGContextSetGrayFillColor(context, 0.5, 0.7); CGContextMoveToPoint(context, CGRectGetMinX(rect) + radius, CGRectGetMinY(rect)); CGContextAddArc(context, CGRectGetMaxX(rect) - radius, CGRectGetMinY(rect) + radius, radius, 3 * M_PI / 2, 0, 0); CGContextAddArc(context, CGRectGetMaxX(rect) - radius, CGRectGetMaxY(rect) - radius, radius, 0, M_PI / 2, 0); CGContextAddArc(context, CGRectGetMinX(rect) + radius, CGRectGetMaxY(rect) - radius, radius, M_PI / 2, M_PI, 0); CGContextAddArc(context, CGRectGetMinX(rect) + radius, CGRectGetMinY(rect) + radius, radius, M_PI, 3 * M_PI / 2, 0); CGContextClosePath(context); CGContextFillPath(context); 

Isso fará com que seu retângulo arredondado para sua visão. Você pode encontrar um exemplo completo na amostra HeadsUpUI fornecida com o SDK. HTH