8
votes

Tourner l'image dans UiImageView

est-il possible de ne faire pivoter qu'une image dans UiImageView? Je cherche des informations à ce sujet, mais je n'ai trouvé que des informations sur la rotation de l'uiimageveiw.


0 commentaires

5 Réponses :


6
votes

Jetez un oeil à la rotation du calque de l'imageView. Vous devrez importer la bibliothèque de quartzcore pour rendre cela accessible. xxx


1 commentaires

dû utiliser sefrafinetransform



15
votes

Vous pouvez faire pivoter l'image avec le code suivant. Remarque, cela utilise un cgimagerf que vous pouvez obtenir à partir d'un uiimage via xxx pré>

une fois que vous avez obtenu l'image en rotation, vous pouvez définir l'image de l'imageView sur votre nouvelle image rotative comme ceci: p>

- (CGImageRef)CGImageRotatedByAngle:(CGImageRef)imgRef angle:(CGFloat)angle
{

    CGFloat angleInRadians = angle * (M_PI / 180);
    CGFloat width = CGImageGetWidth(imgRef);
    CGFloat height = CGImageGetHeight(imgRef);

    CGRect imgRect = CGRectMake(0, 0, width, height);
    CGAffineTransform transform = CGAffineTransformMakeRotation(angleInRadians);
    CGRect rotatedRect = CGRectApplyAffineTransform(imgRect, transform);

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGContextRef bmContext = CGBitmapContextCreate(NULL,
                                                   rotatedRect.size.width,
                                                   rotatedRect.size.height,
                                                   8,
                                                   0,
                                                   colorSpace,
                                                   kCGImageAlphaPremultipliedFirst);
    CGContextSetAllowsAntialiasing(bmContext, YES);
    CGContextSetShouldAntialias(bmContext, YES);
    CGContextSetInterpolationQuality(bmContext, kCGInterpolationHigh);
    CGColorSpaceRelease(colorSpace);
    CGContextTranslateCTM(bmContext,
                          +(rotatedRect.size.width/2),
                          +(rotatedRect.size.height/2));
    CGContextRotateCTM(bmContext, angleInRadians);
    CGContextTranslateCTM(bmContext,
                          -(rotatedRect.size.width/2),
                          -(rotatedRect.size.height/2));
    CGContextDrawImage(bmContext, CGRectMake(0, 0,
                                             rotatedRect.size.width,
                                             rotatedRect.size.height),
                       imgRef);



    CGImageRef rotatedImage = CGBitmapContextCreateImage(bmContext);
    CFRelease(bmContext);
    [(id)rotatedImage autorelease];

    return rotatedImage;
}


3 commentaires

Merci. C'est exactement ce que je veux.


Quelqu'un peut faire face à un résultat imprévisible car je l'ai récemment fait - l'image finale perdait sa taille originale et ses coins coupés. Donc, j'ai modifié la fonction pour obtenir un résultat correct. Si ma demande est la solution de quelqu'un ici: stackoverflow.com/ Questions / 19219855 / ...


Après la rotation, la taille de l'image changera comme observateur précédent mentionné. Il y a un bogue mineur dans le code ci-dessus. Le dernier appel à CGContextTranslatectM ​​et CGContextDrawImage doit utiliser la largeur et la hauteur d'origine au lieu de rounderrect.size.Width et arrondi.size.Height. Une fois que vous faites cela, ce code ci-dessus fonctionne parfaitement. Raison - une CTXT avec un rect rotation est créée, l'origine est déplacée au centre, puis elle est inversement pivotée pour correspondre à l'orientation d'image d'origine. À ce stade, vous devez le déplacer dans le système de coordonnées d'origine d'origine.



5
votes

S'il vous plaît essayez ceci, cela fonctionne pour moi: xxx

bonne chance!


1 commentaires

Solution commune, mais vous faites pivoter imageview et non l'image elle-même, qui est la question initiale.



2
votes

Le code suivant fonctionne bien avec SWIFT:

let img = UIImage(CGImage: self.imageView.image!.CGImage, scale: 1.0, orientation: UIImageOrientation.Right)
self.imageView.image = img
self.imageView.setNeedsLayout()


0 commentaires

0
votes

Si vous devez faire pivoter / retourner une image à des fins de localisation, vous pouvez utiliser ce qui suit: imageview.image = imageview.image? .ImageflippedForrittoleftLayOutDirection ()


0 commentaires