2011-07-11 7 views

risposta

36

Si potrebbe aggiungere una visualizzazione secondaria al UIImageView contenente un'altra immagine con il piccolo triangolo riempito. Oppure si potrebbe disegnare all'interno della prima immagine:

CGFloat width, height; 
UIImage *inputImage; // input image to be composited over new image as example 

// create a new bitmap image context at the device resolution (retina/non-retina) 
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), YES, 0.0);   

// get context 
CGContextRef context = UIGraphicsGetCurrentContext();  

// push context to make it current 
// (need to do this manually because we are not drawing in a UIView) 
UIGraphicsPushContext(context);        

// drawing code comes here- look at CGContext reference 
// for available operations 
// this example draws the inputImage into the context 
[inputImage drawInRect:CGRectMake(0, 0, width, height)]; 

// pop context 
UIGraphicsPopContext();        

// get a UIImage from the image context- enjoy!!! 
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); 

// clean up drawing environment 
UIGraphicsEndImageContext(); 

Questo codice (source here) creerà un nuovo UIImage che è possibile utilizzare per inizializzare un UIImageView.

20

Si può provare questo, funziona perfetto per me, la sua categoria UIImage:

- (UIImage *)drawImage:(UIImage *)inputImage inRect:(CGRect)frame { 
    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0); 
    [self drawInRect:CGRectMake(0.0, 0.0, self.size.width, self.size.height)]; 
    [inputImage drawInRect:frame]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

o Swift:

extension UIImage { 
    func image(byDrawingImage image: UIImage, inRect rect: CGRect) -> UIImage! { 
     UIGraphicsBeginImageContext(size) 
     draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) 
     image.draw(in: rect) 
     let result = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return result 
    } 
} 
+0

Grazie tizio, è un frammento molto utile. –

+1

Funziona bene, grazie. Ti suggerisco di usare "UIGraphicsBeginImageContextWithOptions (size, false, 0)", comunque. Questo ti darà un'immagine con la risoluzione corretta per lo schermo. (L'impostazione predefinita produrrà solo un'immagine x1, che sarà quasi sicuramente sfocata). – Womble