2013-07-01 11 views
37

Sto provando a impostare cornerRadius di UIButton ma non so come farlo.set cornerRadius e setbackgroundimage su UIButton

Se faccio così:

button.layer.cornerRadius = 5; 

funziona bene, se faccio così:

button.layer.cornerRadius = 5; 
[button setBackgroundColor:[UIColor colorWithPatternImage:radialGradient]]; 

gli angoli non sono arrotondati.

So che potrei risolvere questo Whit

[button.layer setMasksToBounds:YES]; 

ma ho specificamente alla ricerca di una soluzione diversa, perché aggiungo alcune frecce al pulsante e se ho impostato maschera per limiti la freccia sono mascherati.

EDIT:

radialGradient è fatto di Pentecoste func

+ (UIImage *)getRadialGradientImage:(CGSize)size centre:(CGPoint)centre radius:(float)radius startColor:(UIColor *)startColor endColor:(UIColor *)endColor{ 

// Initialise 
UIGraphicsBeginImageContextWithOptions(size, YES, 1); 

// Create the gradient's colours 
size_t num_locations = 2; 
CGFloat locations[2] = { 0.0, 1.0 }; 

const CGFloat *component_first = CGColorGetComponents([startColor CGColor]); 

CGFloat red1 = component_first[0]; 
CGFloat green1 = component_first[1]; 
CGFloat blue1 = component_first[2]; 

const CGFloat *component_second = CGColorGetComponents([endColor CGColor]); 
CGFloat red2 = component_second[0]; 
CGFloat green2 = component_second[1]; 
CGFloat blue2 = component_second[2]; 

const CGFloat components[8] = { red1,green1,blue1,1,red2,green2,blue2,1}; // End color 

CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB(); 
CGGradientRef myGradient = CGGradientCreateWithColorComponents (myColorspace, components, locations, num_locations); 

// Normalise the 0-1 ranged inputs to the width of the image 
CGPoint myCentrePoint = CGPointMake(centre.x * size.width, centre.y * size.height); 
float myRadius = MIN(size.width, size.height) * radius; 

// Draw it! 
CGContextDrawRadialGradient (UIGraphicsGetCurrentContext(), myGradient, myCentrePoint, 
          0, myCentrePoint, myRadius, 
          kCGGradientDrawsAfterEndLocation); 

// Grab it as an autoreleased image 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

// Clean up 
CGColorSpaceRelease(myColorspace); // Necessary? 
CGGradientRelease(myGradient); // Necessary? 
UIGraphicsEndImageContext(); // Clean up 
return image; 
} 
+0

Can U mostrare la dichiarazione ** radialGradient **>.? –

+0

Modifica la mia domanda –

risposta

3

// Crea pulsante mi piace questo

 UIButton *cancel=[[UIButton alloc]initWithFrame:CGRectMake(9, 9,35,35)]; 
    cancel.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"BackX.png"]]; 
[cancel setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 

    [cancel.layer setBorderColor: [[UIColor blackColor] CGColor]]; 
    [cancel.layer setBorderWidth: 1.0]; 
    cancel.contentMode=UIViewContentModeScaleAspectFill; 
    cancel.clipsToBounds=YES; 
    cancel.layer.cornerRadius=8.0; 
    [cancel addTarget:self action:@selector(cancelbtnclk1:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:cancel]; 

Prima che aggiungono QuartzCore quadro e import QuartzCore/CoreAnimation.h nel vostro. h file.

spero che aiuta a ..

+0

Ciao, grazie per la risposta, ma io in particolare non voglio clipToBounds. –

+0

ok .. se non si desidera, quindi impostarlo su No o rimuovere quello .. – Alex

+0

Sì, ma poi non è messo alle strette: D –

45

Ecco come vorrei creare un pulsante tramite il codice e impostare il colore di sfondo.

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(100, 100, 100,50); 
[btn setTitle:@"Hello" forState:UIControlStateNormal]; 
[btn setBackgroundColor:[UIColor colorWithRed:128.0/255.0f green:0.0/255.0f blue:0.0/255.0f alpha:0.7]]; 
btn.frame = CGRectMake(100.0, 100.0, 120.0, 50.0);//width and height should be same value 
btn.clipsToBounds = YES; 

btn.layer.cornerRadius = 20;//half of the width 
btn.layer.borderColor=[UIColor redColor].CGColor; 
btn.layer.borderWidth=2.0f; 

[self.view addSubview:btn]; 

Di seguito si riporta l'immagine del pulsante che è correlata con il codice di cui sopra enter image description here

Si può sempre giocare con il codice e creare i colori che avete bisogno per sfondo e il bordo. Spero che questo ti possa aiutare.

+5

clipToBounds risolto il problema per me –

16
btn.clipsToBounds = YES; 

Ho appena aggiunto questo e ha funzionato per me. In realtà sono riuscito a impostare il raggio dell'angolo su UIButton impostando un'immagine su quel particolare UIButton.

+0

Che è fantastico! Ora so che i limiti includono il raggio di confine. –

4

si può anche avere:

btn.clipsToBounds = true; 
+0

Attenzione, 'YES' /' NO' dovrebbe essere usato con Objective-C mentre 'true' /' false' può essere usato per Swift. – JAL

+1

@ JAL Puoi anche usare 'true' /' TRUE' e 'false' /' FALSE' in Objective-C, insieme a 'YES' e' NO'. – Luke

+0

È preferibile utilizzare SÌ/NO con il tipo BOOL Objective-C, poiché la mappa true/false al tipo bool C. – JAL