UIScrollView zoomToRect pas de zoom donné rect (créé à partir de UITouch CGPoint)

Ma demande a un UIScrollView avec une sous-vue. La sous-vue est prolongée d'une UIView qui imprime une page PDF pour elle-même à l'aide de calques dans le drawLayer événement.

Zoom en utilisant le construit en pinçant fonctionne très bien. setZoomScale fonctionne également comme prévu.

J'ai été aux prises avec la zoomToRect fonction. J'ai trouvé un exemple en ligne, ce qui rend une CGRect zoomRect variable à partir d'une donnée CGPoint.

Dans le touchesEnded fonction, si il y avait un double tap et ils sont tout le chemin de zoom, je veux effectuer un zoom avant sur PDFUIView j'ai créé comme s'ils étaient les pinçant avec le centre de la pince, où ils double-exploité.

Donc supposer que je passe le UITouch variable à ma fonction qui utilise zoomToRect si ils touchez deux fois.

J'ai commencé avec la fonction suivante que j'ai trouvé sur les pommes de site:

http://developer.apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html

Ce qui suit est une version modifiée pour mon UIScrollView classe étendue:

- (void)zoomToCenter:(float)scale withCenter:(CGPoint)center {     

    CGRect zoomRect;
    zoomRect.size.height = self.frame.size.height / scale;
    zoomRect.size.width  = self.frame.size.width  / scale;

    zoomRect.origin.x = center.x - (zoomRect.size.width  / 2.0);
    zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0); 

    //return zoomRect;

    [self zoomToRect:zoomRect animated:YES];

} 

Quand je fais cela, le UIScrollView semble zoom en utilisant le bas du bord droit de la zoomRect ci-dessus et non au centre.

Si je fais UIView comme ce

UIView *v = [[UIView alloc] initWithFrame:zoomRect]; 
[v setBackgroundColor:[UIView redColor]];
[self addSubview:v];

Le rouge de la boîte de montre avec le point de contact de morts dans le centre.

Note: je suis en train d'écrire cela à partir de mon PC, je me souviens de déconner avec les divisée en deux partie sur mon Mac, il suffit de supposer que ceci dessine un rectangle avec le point de contact dans le centre. Si le UIView a attiré hors du centre, mais agrandie vers le bon endroit, il serait tout bon.

Cependant, ce qui se passe, c'est quand il préformes la zoomToRect il semble qu'il utilise en bas à droite au large de la zoomRect en haut à gauche de l'agrandissement dans les résultats.

Aussi, j'ai remarqué que selon l'endroit où je clique sur le UIScrollView, il ancres différentes taches. Il semble presque comme il y a une croix au milieu, et qui reflète les points en quelque sorte comme si n'importe où à gauche du centre est un négatif de réflexion et de n'importe où à droite du centre est un reflet positif?

Cela semble compliqué, n'est-ce pas juste de zoom à l'rect qui a été établi que la UIView était en mesure de tirer?

J'ai utilisé beaucoup de recherches pour comprendre comment créer un document PDF que les échelles de haute qualité, donc je suis en supposant que l'utilisation de la CALayer peut être en déréglant le système de coordonnées? Mais à la UIScrollView il faut juste le traiter comme un point de vue avec 768x985 dimensions.

C'est un peu avancée, veuillez prendre le code pour la création de la zoomRect est tout bon. Il y a quelque chose de plus profond avec la CALayer dans le UIView qui est dans le UIScrollView....

OriginalL'auteur pmhart | 2010-03-05