UIScrollView

JekarJekar Membre
19:49 modifié dans API UIKit #1
Je fais ca pour ajouter une image a mon UIscrollView.

UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@&quot;metro.gif&quot;]];<br />	[self setMyImage:tempImageView];<br />	[tempImageView release];<br />	<br />	myScrollView.contentSize = CGSizeMake(myImage.frame.size.width, myImage.frame.size.height);<br />	myScrollView.maximumZoomScale = 4.0;<br />	myScrollView.minimumZoomScale = 0.25;<br />	myScrollView.clipsToBounds = YES;<br />	myScrollView.delegate = self;<br />	[myScrollView addSubview:myImage];


Ca fonctionne bien, sauf que l image apparait en haut a gauche, je voudrais centrer la vue sur le centre de l image. Quel methode utiliser?

Réponses

  • JekarJekar Membre
    19:49 modifié #2
    Personne n'a une astuce pour moi?
  • Philippe49Philippe49 Membre
    19:49 modifié #3
    myImage.center = ....
    Le problème c'est que par essence même, le centre de la partie visible de la scroll view n'est pas sensée être fixe. Il faudrait donc préciser ce que tu entends par "centrer la vue sur le centre de l image"
  • JekarJekar Membre
    19:49 modifié #4
    J ai une image que j utilise et je scroll dessus. Lors tu chargement, on arrive sur le coin jaut gauche de l image. J aimerai qu on arrive sur le centre de mon image...
  • JekarJekar Membre
    19:49 modifié #5
    Ca marche
    CGPoint monPoint;<br />	monPoint.x=4;<br />	monPoint.y=5;<br />	myImage.center = monPoint;
    


    myImage est un UIImageView.


    Merci  :p

  • JekarJekar Membre
    19:49 modifié #6
    Argh parlé trop vite, ca centre bien, mais ca met le bordel dans le scroll et le zoom :(
  • Philippe49Philippe49 Membre
    19:49 modifié #7
    Et cela ça ne marche pas ?

    - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated

    Parameters
    rect
    A rectangle defining an area of the content view.
    animated
    YES if the scrolling should be animated, NO if it should be immediate.
    Discussion
    This method scrolls the content view so that the area defined by rect is just visible inside the scroll view. If the area is already visible, the method does nothing.
  • JekarJekar Membre
    19:49 modifié #8
    Nop, ca ouvre toujours avec la vue centrer sur le coin haut gauche....  :'(
  • Philippe49Philippe49 Membre
    19:49 modifié #9
    En ajustant correctement le rectangle ?

  • JekarJekar Membre
    19:49 modifié #10
    - (void)viewDidLoad {<br />	UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@&quot;image.gif&quot;]];<br />	[self setMyImage:tempImageView];<br />	[tempImageView release];<br />	CGPoint monPoint;<br />	monPoint.x=100;<br />	monPoint.y=50;<br />	CGSize size;<br />	size.height= 200;<br />	size.width=100;<br />	CGRect rect;<br />	rect.origin=monPoint;<br />	rect.size=size;<br />	[myScrollView scrollRectToVisible:rect animated:NO];<br />	myScrollView.contentSize = CGSizeMake(myImage.frame.size.width, myImage.frame.size.height);<br />	<br />	myScrollView.maximumZoomScale = 4.0;<br />	myScrollView.minimumZoomScale = 0.25;<br />	//myScrollView.clipsToBounds = YES;<br />	myScrollView.delegate = self;<br />	<br />	[myScrollView addSubview:myImage];<br />	&nbsp; &nbsp; [super viewDidLoad];<br />}
    
  • Philippe49Philippe49 Membre
    19:49 modifié #11
    Déjà  sans rentrer profondément dans ton code, je mettrais [myScrollView addSubview:myImage];  et "myScrollView.contentSize =" avant de faire le scrollRect

  • JekarJekar Membre
    19:49 modifié #12
    nop rien a faire :(
  • Eddy58Eddy58 Membre
    19:49 modifié #13
    Avant le addsubview:myImage, essai :

    <br />myImage.frame=CGRectMake(positionX,positionY,largeurImage,hauteurImage);<br />
    


    Avec les 4 paramètres dans CGRectMake réglés comme tu veux.

  • JekarJekar Membre
    19:49 modifié #14
    Ca decale mon image dans le scrollview c est tout :(
    Sinon est il possible de regler le zoom initial?
  • NoNo Membre
    19:49 modifié #15
    Je pense que personne n'a vraiment saisi ce que tu voulais (mais t'as pas été clair, par exemple dans ton dernier post où tu parles de srollview et de zoom : 2 concepts différents).

    Donc pour moi, t'as une grande image (donc grande imageView) mise dans une srollView.
    Et tu veux par défaut (sans doute au démarrage) que le centre de l'image soit affichée (et donc que les scrollers horizontaux et verticaux de la scrollView soient au milieu de leur barre de défilement).

    C'est ça ?
  • JekarJekar Membre
    19:49 modifié #16
    oui, premiere solution.
    SI j y arrive pas, reussir a ajuster le zoom au chargement.
  • NoNo Membre
    19:49 modifié #17
    Ok.

    1. il faut calculer le delta entre la taille du scrollView et celle de l'imageView.
    La taille (sous Appkit, mais ça doit être pareil sous UIKit) de la scrollView se récupère par la proprieté bounds de la view renvoyé par la méthode contentView.

    2. à  partir de là , il faut déduire le point central pour chaque axe. Une formule du style :
    [tt](largeur_image - largeur_scrollview) / 2[/tt]
    pour la largeur te renvoie le point X à  partir duquel l'image doit être affichée (horizontalement) pour qu'elle semble centrée.

    3. enfin il faut utiliser la méthode scrollPoint: de la view renvoyée par la méthode documentView pour scroller jusqu'au centre de l'image. Le point de scrollPoint: est formée par la méthode expliqué au point 2 pour chaque axe.
  • JekarJekar Membre
    19:49 modifié #18
    D apres la doc documentView est pour un NSscrollView, j ai pas trouve de reference pour un UIscrollView.

    Et scrollPoint dans Iphone OS library est pour la Classe CAlayer.
  • Philippe49Philippe49 Membre
    19:49 modifié #19
    Je n'ai jamais essayé cette vue, donc je ne peux te donner que des pistes à  essayer.
    La contentSize de ta scroll view est actuellement identique à  l'image que tu veux mettre dednas. Donc il est assez logique que le scroller ne scrolle rien du tout . Essaie de mettre une grande contentsize 1000x100 par exemple
  • JekarJekar Membre
    19:49 modifié #20
    ha sisi ca scroll bien, ca zoom aussi, pas de soucis.

  • Eddy58Eddy58 Membre
    19:49 modifié #21
    On a du mal à  cerner ton besoin...

    Tu veux savoir comment positionner ton scrolling et régler le zoom lors de l'initialisation  (et quand tu as besoin) ?
  • Philippe49Philippe49 Membre
    19:49 modifié #22
    Le code que tu cherches ne se trouverait-il pas dans l'exemple "Scrolling"


    iPhone Dev Center > iPhone Reference Library > Topics > User Experience: Windows & Views > Scrolling
  • JekarJekar Membre
    19:49 modifié #23
    Non pas ce que je veux dedans.

    Le 2eme scrollview est initialisé avec l image en haut a gauche.
  • JekarJekar Membre
    19:49 modifié #24
    J ai trouve la reponse sur le forum apple.
    Il faut creer une sous classe de UIScrollView et modifier setContentOffset.

    <br />-(void)setContentOffset:(CGPoint)p<br />{<br />	if(self.contentView != nil)<br />	{<br />		CGSize viewSize = self.contentView.frame.size;<br />		CGSize scrollSize = self.bounds.size;<br />		if(viewSize.width &lt; scrollSize.width)<br />		{<br />			 p.x = -(scrollSize.width - viewSize.width) / 2.0;<br />		}<br />		if(viewSize.height &lt; scrollSize.height)<br />		{<br />			 p.y = -(scrollSize.height - viewSize.height) / 2.0;<br />		}<br />	}<br />	super.contentOffset = p;<br />}
    
Connectez-vous ou Inscrivez-vous pour répondre.