it-swarm.com.de

Wie skaliere ich eine UIImageView proportional?

Ich habe ein UIImageView und das Ziel ist es, es proportional zu verkleinern, indem Sie ihm entweder eine Höhe oder eine Breite geben.

UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3092/2915896504_a88b69c9de.jpg"]]];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

//Add image view
[self.view addSubview:imageView];   

//set contentMode to scale aspect to fit
imageView.contentMode = UIViewContentModeScaleAspectFit;

//change width of frame
CGRect frame = imageView.frame;
frame.size.width = 100;
imageView.frame = frame;

Die Größe des Bildes wurde geändert, aber die Position befindet sich nicht oben links. Was ist der beste Ansatz zum Skalieren von Bild/Bildansicht und wie korrigiere ich die Position?

338
Ronnie Liew

Leicht behoben, sobald ich die Dokumentation gefunden habe!

 imageView.contentMode = UIViewContentModeScaleAspectFit;
539
Ken Abrams

Ich habe ein wenig über Skalierungsarten gesprochen und mich daher entschlossen, einen Artikel über einige der beliebtesten Skalierungsarten im Inhaltsmodus zusammenzustellen.

Das dazugehörige Bild ist hier:

enter image description here

397
Jacksonkr

Ich habe gerade versucht, und UIImage unterstützt _imageScaledToSize nicht.

Am Ende habe ich UIImage mithilfe einer Kategorie eine Methode hinzugefügt - ein Vorschlag, den ich in den Apple Dev-Foren gefunden habe.

In einem projektweiten .h -

@interface UIImage (Extras)
- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize;
@end;

Implementierung:

@implementation UIImage (Extras)

- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {

    UIImage *sourceImage = self;
    UIImage *newImage = nil;

    CGSize imageSize = sourceImage.size;
    CGFloat width = imageSize.width;
    CGFloat height = imageSize.height;

    CGFloat targetWidth = targetSize.width;
    CGFloat targetHeight = targetSize.height;

    CGFloat scaleFactor = 0.0;
    CGFloat scaledWidth = targetWidth;
    CGFloat scaledHeight = targetHeight;

    CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

    if (CGSizeEqualToSize(imageSize, targetSize) == NO) {

        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;

        if (widthFactor < heightFactor) 
            scaleFactor = widthFactor;
        else
            scaleFactor = heightFactor;

        scaledWidth  = width * scaleFactor;
        scaledHeight = height * scaleFactor;

        // center the image

        if (widthFactor < heightFactor) {
            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
        } else if (widthFactor > heightFactor) {
            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
        }
    }


    // this is actually the interesting part:

    UIGraphicsBeginImageContext(targetSize);

    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.Origin = thumbnailPoint;
    thumbnailRect.size.width  = scaledWidth;
    thumbnailRect.size.height = scaledHeight;

    [sourceImage drawInRect:thumbnailRect];

    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    if(newImage == nil) NSLog(@"could not scale image");


    return newImage ;
}

@end;
78
Jane Sales
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = YES;
38
Li-chih Wu

Sie können versuchen, die Größe von imageView der Größe von image anzupassen. Der folgende Code wird nicht getestet.

CGSize kMaxImageViewSize = {.width = 100, .height = 100};
CGSize imageSize = image.size;
CGFloat aspectRatio = imageSize.width / imageSize.height;
CGRect frame = imageView.frame;
if (kMaxImageViewSize.width / aspectRatio <= kMaxImageViewSize.height) 
{
    frame.size.width = kMaxImageViewSize.width;
    frame.size.height = frame.size.width / aspectRatio;
} 
else 
{
    frame.size.height = kMaxImageViewSize.height;
    frame.size.width = frame.size.height * aspectRatio;
}
imageView.frame = frame;
30
Chris Lundie
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3092/2915896504_a88b69c9de.jpg"]]];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 


//set contentMode to scale aspect to fit
imageView.contentMode = UIViewContentModeScaleAspectFit;

//change width of frame
//CGRect frame = imageView.frame;
//frame.size.width = 100;
//imageView.frame = frame;

//original lines that deal with frame commented out, yo.
imageView.frame = CGRectMake(10, 20, 60, 60);

...

//Add image view
[myView addSubview:imageView]; 

Der ursprüngliche Code, der oben veröffentlicht wurde, hat für mich in iOS 4.2 gut funktioniert.

Ich fand, dass das Erstellen eines CGRect und das Angeben aller Werte für oben, links, Breite und Höhe in meinem Fall die einfachste Methode zum Anpassen der Position war, bei der eine UIImageView in einer Tabellenzelle verwendet wurde. (Sie müssen noch Code hinzufügen, um Objekte freizugeben.)

13
Nate Flink

auf diese Weise kann man die Größe eines UII-Bildes ändern

image = [UIImage imageWithCGImage:[image CGImage] scale:2.0 orientation:UIImageOrientationUp];
12
neoneye

Stellen Sie Ihren ImageView-Modus auf Aspect Fill Und aktivieren Sie das Kontrollkästchen Clip Subviews.

enter image description here

12
Jeffrey Neo

Das funktioniert gut für mich Swift 2.x:

imageView.contentMode = .ScaleAspectFill
imageView.clipsToBounds = true;
9
vvamondes

Für Swift:

self.imageViews.contentMode = UIViewContentMode.ScaleToFill
6
Somir Saikia

Stellen Sie Ihr UIimageview nach Maßstab ein .........

enter image description here

6
P.J.Radadiya

UIImageView + Scale.h:

#import <Foundation/Foundation.h>

@interface UIImageView (Scale)

-(void) scaleAspectFit:(CGFloat) scaleFactor;

@end

UIImageView + Scale.m:

#import "UIImageView+Scale.h"

@implementation UIImageView (Scale)


-(void) scaleAspectFit:(CGFloat) scaleFactor{

    self.contentScaleFactor = scaleFactor;
    self.transform = CGAffineTransformMakeScale(scaleFactor, scaleFactor);

    CGRect newRect = self.frame;
    newRect.Origin.x = 0;
    newRect.Origin.y = 0;
    self.frame = newRect;
}

@end
5
Peter Kreinz

Wenn die hier vorgeschlagenen Lösungen für Sie nicht funktionieren und Ihr Bild-Asset tatsächlich eine PDF-Datei ist, beachten Sie, dass XCode PDFs tatsächlich anders als Bilddateien behandelt. Insbesondere scheint es nicht in der Lage zu sein, eine PDF-Datei richtig auszufüllen: Stattdessen wird sie gekachelt. Das machte mich wahnsinnig, bis ich herausfand, dass es sich um das PDF) -Format handelte. In JPG konvertieren und loslegen sollte.

2
Lane Rettig

Ich habe folgenden Code verwendet. ImageCoverView ist UIView enthält UIImageView

if (image.size.height<self.imageCoverView.bounds.size.height && image.size.width<self.imageCoverView.bounds.size.width)
{
    [self.profileImageView sizeToFit];
    self.profileImageView.contentMode =UIViewContentModeCenter
}
else
{
    self.profileImageView.contentMode =UIViewContentModeScaleAspectFit;
}
2
Avijit Nagare

Normalerweise verwende ich diese Methode für meine Apps (Swift 2.x kompatibel):

// Resize UIImage
func resizeImage(image:UIImage, scaleX:CGFloat,scaleY:CGFloat) ->UIImage {
    let size = CGSizeApplyAffineTransform(image.size, CGAffineTransformMakeScale(scaleX, scaleY))
    let hasAlpha = true
    let scale: CGFloat = 0.0 // Automatically use scale factor of main screen

    UIGraphicsBeginImageContextWithOptions(size, !hasAlpha, scale)
    image.drawInRect(CGRect(Origin: CGPointZero, size: size))

    let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return scaledImage
}
1

Ich denke, Sie können so etwas tun

image.center = [[imageView window] center];
0
user26359