2012-12-04 3 views
0

J'ai fait un UIImage Objectif C catagory pour abriter cette fonction:catégorie Objective-C erreur « sélecteur non reconnu »

#import "UIImage+fixOrientation.h" 

@implementation UIImage (fixOrientation) 

- (UIImage *)fixOrientation 
{ 

    // No-op if the orientation is already correct 
    if (self.imageOrientation == UIImageOrientationUp) return self; 

    // We need to calculate the proper transformation to make the image upright. 
    // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored. 
    CGAffineTransform transform = CGAffineTransformIdentity; 

    switch (self.imageOrientation) { 
     case UIImageOrientationDown: 
     case UIImageOrientationDownMirrored: 
      transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height); 
      transform = CGAffineTransformRotate(transform, M_PI); 
      break; 

     case UIImageOrientationLeft: 
     case UIImageOrientationLeftMirrored: 
      transform = CGAffineTransformTranslate(transform, self.size.width, 0); 
      transform = CGAffineTransformRotate(transform, M_PI_2); 
      break; 

     case UIImageOrientationRight: 
     case UIImageOrientationRightMirrored: 
      transform = CGAffineTransformTranslate(transform, 0, self.size.height); 
      transform = CGAffineTransformRotate(transform, -M_PI_2); 
      break; 
    } 

    switch (self.imageOrientation) { 
     case UIImageOrientationUpMirrored: 
     case UIImageOrientationDownMirrored: 
      transform = CGAffineTransformTranslate(transform, self.size.width, 0); 
      transform = CGAffineTransformScale(transform, -1, 1); 
      break; 

     case UIImageOrientationLeftMirrored: 
     case UIImageOrientationRightMirrored: 
      transform = CGAffineTransformTranslate(transform, self.size.height, 0); 
      transform = CGAffineTransformScale(transform, -1, 1); 
      break; 
    } 

    // Now we draw the underlying CGImage into a new context, applying the transform 
    // calculated above. 
    CGContextRef ctx = CGBitmapContextCreate(NULL, self.size.width, self.size.height, 
              CGImageGetBitsPerComponent(self.CGImage), 0, 
              CGImageGetColorSpace(self.CGImage), 
              CGImageGetBitmapInfo(self.CGImage)); 
    CGContextConcatCTM(ctx, transform); 
    switch (self.imageOrientation) { 
     case UIImageOrientationLeft: 
     case UIImageOrientationLeftMirrored: 
     case UIImageOrientationRight: 
     case UIImageOrientationRightMirrored: 
      // Grr... 
      CGContextDrawImage(ctx, CGRectMake(0,0,self.size.height,self.size.width), self.CGImage); 
      break; 

     default: 
      CGContextDrawImage(ctx, CGRectMake(0,0,self.size.width,self.size.height), self.CGImage); 
      break; 
    } 

    // And now we just create a new UIImage from the drawing context 
    CGImageRef cgimg = CGBitmapContextCreateImage(ctx); 
    UIImage *img = [UIImage imageWithCGImage:cgimg]; 
    CGContextRelease(ctx); 
    CGImageRelease(cgimg); 
    return img; 
} 

@end 

J'ai impelmented au meilleur de ma connaissance, mais pour des raisons de l'utilisation, il continue à venir avec cette erreur:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage fixOrientation]: unrecognized selector sent to instance 0x1f0ce270' 

dans mon dossier UIImage + fixOrientation.h mon code ressemble à ceci:

#import <UIKit/UIKit.h> 

@interface UIImage (fixOrientation) 

- (UIImage *)fixOrientation; 


@end 

et mon fichier UIImage + fixOrientation.m se compose du code que j'ai posté au début. J'ai regardé dans les autres indicateurs de liens dans la section de construction de la cible du projet avec quelques suggestions, mais cela n'a pas aidé! Honnêtement, je ne peux pas comprendre pourquoi il ne peut pas trouver cette fonction ...

c'est aussi que je l'ai utilisé la fonction:

NSData *imageData = UIImageJPEGRepresentation([[imageManager pickerImage] fixOrientation], 0.5);

Est-ce que quelqu'un a une idée pourquoi il pourrait être jeter moi ce message? Merci d'avance!

+0

Avez-vous importé votre catégorie avant de tenter de l'utiliser? – Alladinian

+0

J'ai yeh, en haut du fichier, mais il jette toujours cette erreur:/ – Ollie177

+1

Êtes-vous sûr que le fichier '.m' de votre catégorie est ajouté à la bonne cible? – Alladinian

Répondre

9

Apparemment, vous avez simplement oublié d'ajouter cette catégorie à la cible.

S'il vous plaît jeter un oeil à cette capture d'écran et vérifier si elle ressemble la même chose pour vous:

enter image description here

+0

C'est exactement ça! il a été affecté à la mauvaise cible. Merci beaucoup pour votre aide ne peut pas croire que c'était si simple -.- m'a aidé une énorme quantité de hourras! – Ollie177

+0

Pourquoi cela ne générerait-il pas une erreur de liaison? J'ai eu ce problème - il a trouvé mon en-tête, savait ce que j'essayais de faire, mais n'a pas lié le symbole - évidemment. –

0

Vous devrez ajouter #import UIImage+fixOrientation.h à tout fichier que vous souhaitez utiliser la catégorie Sinon, si. la méthode est généralement utile à l'ensemble du projet, vous pouvez le mettre dans votre fichier *-Prefix.pch afin qu'il soit disponible partout dans le projet.

+0

Je l'ai importé dans les deux cas, mais l'erreur est toujours présente: /. – Ollie177

+0

Il a eu un accident alors que l'en-tête manqué vous donnerait un avertissement à la compilation. – Ievgen

Questions connexes