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. p>
5 Réponses :
Jetez un oeil à la rotation du calque de l'imageView. Vous devrez importer la bibliothèque de quartzcore pour rendre cela accessible.
dû utiliser sefrafinetransform code>
Vous pouvez faire pivoter l'image avec le code suivant. Remarque, cela utilise un cgimagerf que vous pouvez obtenir à partir d'un uiimage via 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;
}
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.
S'il vous plaît essayez ceci, cela fonctionne pour moi: bonne chance! p> p>
Solution commune, mais vous faites pivoter imageview et non l'image elle-même, qui est la question initiale.
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()
Si vous devez faire pivoter / retourner une image à des fins de localisation, vous pouvez utiliser ce qui suit:
imageview.image = imageview.image? .ImageflippedForrittoleftLayOutDirection () code> p>