2009-04-02 6 views

Répondre

19

La réponse originale a été remplacée par CoreAnimation dans iOS4.

Donc, comme l'indique Gold Thumb: vous pouvez le faire en accédant au CALayer de UIView. Spécifiquement son contenuRect:

Depuis le Apple Docs: Le rectangle, dans l'espace de coordonnées de l'unité, qui définit la partie du contenu de la couche qui doit être utilisée. Animable.

+0

Incorrect. Voir la réponse @ GoldThumb. –

+2

Juste au moment de l'affichage (2009!) J'ai mis à jour la réponse pour pointer vers CALayer –

+0

Cool! Merci pour la correction. –

4

L'exemple MoveMe ne ressemble pas à ce que vous voulez. Le PlacardView dans lui est la même taille que l'image utilisée. Le seul changement de taille effectué est une transformation de vue, qui n'affecte pas la fenêtre de l'image. Si je comprends bien, vous avez une grande image, et vous voulez montrer une petite fenêtre. Il n'existe pas de méthode de classe simple pour cela, mais il existe une fonction que vous pouvez utiliser pour obtenir les résultats souhaités: CGImageCreateWithImageInRect (CGImageRef, CGRect) vous aidera.

Voici un court exemple utiliser:

CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect); 
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]]; 
CGImageRelease(imageRef); 
12

Voulez-vous afficher l'image afin qu'elle soit contenue dans le UIImageView? Dans ce cas, il suffit de changer le contectMode de UIImageView à UIViewContentModeScaleToFill (si le ratio d'aspect est sans conséquence) ou UIViewContentModeScaleAspectFit (si vous voulez maintenir le ratio d'aspect)

Dans IB, cela peut être fait en réglant le mode dans l'inspecteur.

Dans le code, il peut être fait comme

yourImageView.contentMode = UIViewContentModeScaleToFill; 

Si vous souhaitez afficher la grande image est à l'intérieur d'un UIImageView, le meilleur et le plus simple de le faire serait d'avoir l'image vue à l'intérieur d'un UIScrollView. De cette façon, vous serez en mesure de zoomer et dézoomer dans l'image et également le déplacer.

Espérons que cela aide.

3

Merci beaucoup. J'ai trouvé une solution assez simple qui ressemble à ceci:

CGRect frameRect = myImage.frame; 
CGPoint rectPoint = frameRect.origin; 
CGFloat newXPos = rectPoint.x - 0.5f; 
myImage.frame = CGRectMake(newXPos, 0.0f, myImage.frame.size.width, myImage.frame.size.height); 

Je viens de déplacer le cadre. Il arrive que des parties de ce cadre sortent du port de vue de l'iPhone, mais j'espère que cela n'aura pas d'importance. Il y a un masque dessus, donc ça n'a pas l'air bizarre. L'utilisateur ne précise pas comment cela est fait.

0

Vous pouvez accomplir la même chose en:

UIImageView *imgVw=[[UIImageView alloc]initwithFrame:CGRectMake(x,y,height,width)];  
imgVw.image=[UIImage imageNamed:@""]; 
[self.view addSubView imgVw]; 
imgVw.contentMode = UIViewContentModeScaleToFill; 
22

Qu'est-ce que vous avez besoin est quelque chose comme (par exemplereprésentant les 30% de 30% de l'angle supérieur gauche de l'image d'origine):

imageView.layer.contentsRect = CGRectMake(0.0, 0.0, 0.3, 0.3); 

Description « contentsRect »: Le rectangle, dans l'unité espace de coordonnées, qui définit la partie du contenu de la couche qui Devrait être utilisé.

+2

Pourquoi le downvote? Cela fonctionne parfaitement si vous définissez 'contentMode' d'imageView à' UIViewContentModeScaleAspectFill'. Veillez également à activer 'clipsToBounds'. –

Questions connexes