2009-06-14 31 views
12

ich hier gelesen habe verschiedene Beiträge über ähnliche Fragen zu stellen ... ich verschiedene Weise versucht haben, die mit Grenzen und Frames usw. einschließlich der folgenden gebucht wurden:UIImageView ändern Breite und Höhe

myImage.frame = CGRectMake(0.0f, 0.0f,50.0f, 50.0f); 

und:

myImage.bounds = CGRectMake(0.0f, 0.0f,50.0f, 120.0f); 

keiner von denen funktioniert.

Allerdings finde ich es interessant, dass der folgende Code lassen ist mir das Bild bewegen, aber die Breite ändert sich nicht:

CGRect frameRect = myImage.frame; 
frameRect.size.width = 50.0f; 
frameRect.origin.x += 10.5f; 
myImage.frame = frameRect; 

Also, warum nicht eine dieser die Breite/Höhe meines ändern Bildansicht?

Ich habe einen anderen Beitrag hier gefunden, der grundsätzlich besagt, dass ich ein kleines Buch mit Code korrigieren muss, um mein Bild zu skalieren ... ist das wahr?

wie dieser: UIImage: Resize, then Crop

sicherlich ist dies einfacher als die ??

+0

Ich fand es heraus, meine Frage wurde nicht am besten gefragt, ich hätte sagen sollen, dass es ok war, das Bild zu skalieren. Ich konnte nur den Modus auswählen, der "skaliert werden soll" und der Code, den ich oben habe, funktioniert dann gut. Danke für die Hilfe. –

Antwort

-1

Sie müssen kein ganzes Buch schreiben, Sie können diesen Code kopieren.

Ich glaube, die UIImageView zeichnet immer das Bild bei 0,0 im Maßstab 1,0. Sie müssen die Größe des Bildes ändern, wenn Sie die UIImageView weiterhin verwenden möchten.

0

Verwenden Sie myImageView.frame = myNewPosAndSize; zum Ändern der Größe oder Neupositionierung Ihrer Bildansicht (wie bei jeder anderen Ansicht). Es könnte Sie verwirren, dass die Bildansicht ihr Bild mit seiner Originalgröße zeichnet und möglicherweise seine eigenen Abmessungen überschreitet. Um dies zu deaktivieren, myImageView.clipsToBounds = NO;

11

Zunächst einmal können Sie nicht den Rahmen oder Grenzen des UIImage festlegen - das wird nur auf einem UIImageView funktionieren.

Ich habe festgestellt, dass das Ändern des Rahmens einer UIImageView das Bild skaliert auf die neue Größe hat. Manchmal ist das unerwünscht - und Sie möchten stattdessen das Bild zuschneiden.

kann ich nicht sagen, ob dies ist, was Sie fordern, aber hier ist ein Code, um ein Bild zu einer bestimmten Größe in einem UIImageView zuzuzuschneiden:

UIImage *myImage = [UIImage imageNamed:@"photo.png"]; 

CGRect cropRect = CGRectMake(0.0, 0.0, 320.0, 44.0)); 
CGImageRef croppedImage = CGImageCreateWithImageInRect([myImage CGImage], cropRect); 

UIImageView *myImageView = [[UIImageView alloc] initWithFrame:cropRect]; 
[myImageView setImage:[UIImage imageWithCGImage:croppedImage]]; 

CGImageRelease(croppedImage); 
3

Von dem, was ich von der Frage erhalten, Das OP wollte die Größe der UIImageView ändern, wenn die Größe des Containers UIView geändert wird. Der folgende Code wird es tun ...

UIView * foo = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)] autorelease]; 
foo.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
UIImageView * bar = [[UIImageView alloc] initWithImage: 
        [UIImage imageNamed:@"test.png"]]; 
bar.autoresizingMask = foo.autoresizingMask; 
[foo addSubview:bar]; 
[self.view addSubview:foo]; 

Der Schlüssel hier sind die foo.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight und bar.autoresizingMask = foo.autoresizingMask; Zeilen. Vergiss beides und das ganze Jigmarole hört auf zu arbeiten.

+5

Ich hasse es, wenn jemand foo und bar verwendet –

1

Verwenden Sie ein UIScrollView.Fügen Sie die UIImageView auf die UIScrollView in Interface Builder Sie dann die Position und Größe des Bildes steuern können, wie folgt:

CGRect rect = [scrollView frame]; 

    rect.origin.x = 50.0f; 
    rect.origin.y = 0.0f; 
    rect.size.width = 320.0f; 
    rect.size.height = 150.0f; 

    [scrollView setFrame:rect]; 
24

Im Folgenden wird die Größe des UIImaveView ändern, das darunter liegende Bild Clipping, ohne seine Größe zu ändern und es zu halten ausgerichtet nach links unten aus gesehen:

imageView.frame = CGRectMake(
      imageView.frame.origin.x, 
      imageView.frame.origin.y, newWidth, newHeight); 

imageView.contentMode = UIViewContentModeBottomLeft; // This determines position of image 
imageView.clipsToBounds = YES; 
+11

Das funktioniert nicht – Guy

2

Nun, wenn Ihr in der Dokumentation lesen UIImage Sie feststellen können, dass alle Parameter eines UIImage zu ändern, nachdem schaffen es unmöglich ist, habe die Lösung, die ich für den Einsatz hoher Qualität umgesetzt Bilder zum Ändern eines Parameters von (zum Beispiel) dem SliderControl als Screw Image, ist der nächste:

UIImage *tumbImage= [UIImage imageNamed:@"screw.png"]; 
UIImage *screw = [UIImage imageWithData:UIImagePNGRepresentation(tumbImage) scale:2]; 

Damit kann ich 100x100 px Bild in meinen Apps auf 50% skaliert verwenden.

Mit freundlichen Grüßen.

1

Wenn Sie versucht haben, diese Methoden können nicht funktionieren, ist die einzige Möglichkeit, dies zu tun, die Einschränkung der Breite und Höhe der UIImageView hinzuzufügen.

// Create the constraint in code 
NSLayoutConstraint *constraint0 = [NSLayoutConstraint constraintWithItem: myImage attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:1.0f constant: yourNewsWidth]; 


NSLayoutConstraint *constraint1 = [NSLayoutConstraint constraintWithItem: myImage attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0f constant: yourNewsHeight]; 

[myImage addConstraint:constraint0]; 
[myImage addConstraint:constraint1];