10
votes

UIImageView / Uiscrollview forçant un rapport de format fixe pour adapter l'écran

Je fais une application simple pour l'iPad composé d'une image géante que vous pouvez zoomer et sortir et naviguer.

Cette image est placée dans un uiImageView , qui est ce qui est puis placé dans un uiscrollview .

La navigation et le zoom fonctionnent 100% bien; Cependant, l'image est chargée sur un rapport d'aspect fixe pour s'adapter à l'écran et ne changera jamais (même lors du zoom-in).

J'ai un sentiment que l'interface constructeur est de créer des biens que je ' m pas au courant, mais j'ai essayé tout ce que je peux penser à résoudre ce problème.

Le problème:

Lorsque l'application charge initialement, Le contenu de l'utilisateur uiscrollview est automatiquement repensé à l'écran IPAD en fonction de son rapport d'aspect modifié ./fixed; L'image réelle est géante (beaucoup plus grande que la résolution de l'iPad). Ce rapport d'aspect mis à l'échelle reste même lorsque vous faites zoomer sur l'image et provoque l'apparence de l'image.

Peu importe ce que j'essaie, je ne peux pas arrêter l'iPad de répandre automatiquement mon image. Je souhaite simplement que l'application commence avec mon image affichée normalement (zoom 100%) sur l'iPad, la partie qui convient actuellement sur l'écran iPad étant le coin supérieur gauche de l'image.

Ce que j'ai essayé de le réparer:

J'ai essayé de modifier le mode uIImageView's mode de contenu dans l'interface Builder sur "haut à gauche". Cela semblait fonctionner parfaitement, mais j'ai réalisé que le UiscrollView ne vous permettrait pas de faire défiler l'image au-delà de la partie initialement affichée (à gauche). Vous pouvez zoomer sur la partie supérieure gauche et faire défiler, mais jamais au-delà de ce qui a été montré initialement à l'écran.

code:

Voici le code que j'utilise pour configurer les vues. ImagescrollView est le Uiscrollview et imageview est le uiImageView . Ils sont tous les deux iboutlets . xxx

i ont aussi deux uigesturaliseurs pour gérer le zoom de robinet, mais je ne crois pas qu'ils sont la question. Quand je les commente, rien ne change.

Toute aide serait extrêmement appréciée.


0 commentaires

4 Réponses :


1
votes

Etant donné que le imageview est le contenu de la SCOLLVIEW, essayez de modifier le mode ScrollView's Mode de contenu sur UIViewContentModeScAptfit . Essayez appeler setneedsdisplay sur le imageview .


2 commentaires

Merci pour la réponse, j'apprécie l'aide. J'ai essayé votre suggestion et, malheureusement, le programme effectue exactement de la même manière! J'ai défini le contenu de la carte ScrollView et appelé SetNeedSdisplay sur ImageView à la fin de ma configuration (qui est dans la vue ViewDidLoad ()).


Je n'utilise pas beaucoup IB, principalement à cause de problèmes comme celui-ci. Vous pouvez essayer de construire les vues par programme. Cela pourrait rincer la différence / problème.



16
votes

J'ai corrigé ça!

Pour quelqu'un d'autre ayant le même problème, voici comment j'ai corrigé le code: P>

La cause forte> du bogue était que le constructeur d'interface a été forcé Les vues pour utiliser le ScaletOfill code> contentmode code>. Définition du ScrollView's CODE> ContentMode sur UIViewContentModeScAltfit Code> n'a pas fonctionné seul, car le imageview code> était toujours déformé. P>

le correctif: strong> p>

Le code suivant devait être ajouté à la fin de la configuration du UISCrollView code> et UiImageView code> (à l'intérieur du ViewDidload () code> Méthode): p>

    [imageScrollView setContentMode:UIViewContentModeScaleAspectFit];
    [imageView sizeToFit];
    [imageScrollView setContentSize:CGSizeMake(imageView.frame.size.width, imageView.frame.size.height)];


3 commentaires

J'écrochais cette question après la fermeture de la camionnette où le point de vue principal quitte le défilement. J'ai utilisé ce truc pour restaurer mon défilement sur la vue principale.


Glad (et un peu triste) de voir qu'après environ 2 ans, l'astuce fonctionne toujours et s'applique à d'autres problèmes. J'utilisais iOS4 quand j'avais eu cette question, alors je me suis dit qu'ils l'auraient déjà réparé par ...


@ user357086 J'ai le même problème. Pouvez-vous s'il vous plaît expliquer plus d'autres sur la manière dont vous avez appliqué cela sur coudrebrowser?



0
votes

Pour ceux qui luttent pour corriger l'image de l'image en mode paysage tout en utilisant uicollectionview code> Tout en nécessitant une image pour être plein écran.

dans votre - (uicollectionviewcell *) CollectionView: (uicollectionvoyer *) CollectionView CORELFORITEMATINDEXPATH: (NSIndexPath *) IndustryPath code> Les suivants suivants: P>

CGFloat newWidth = self.view.bounds.size.width; //if iPad in landscape and fullscreen value is 1024
CGFloat newHeight = image.size.height / image.size.width * newWidth;

cell.clipsToBounds = YES;
cell.imageView.frame = CGRectMake(0, 0, newWidth, newHeight);
cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
cell.imageView.image = image;
cell.scrollView.contentSize = cell.imageView.frame.size;


0 commentaires

0
votes

Ce code a fonctionné pour moi: (Swift)

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let imgView = UIImageView(image: UIImage(named: "MyImage"))
    imgView.contentMode = .ScaleAspectFit
    var size = imgView.frame.size
    size.height = size.height / size.width * scrollView.frame.width
    size.width = scrollView.frame.width
    imgView.frame.size = size
    scrollView.addSubview(imgView)
    scrollView.contentSize = size
}


0 commentaires