- Home /
Zooming in and out on iPhone
What is the theory behind the pinch zoom in and out technique used on the iPhone?? How would one do this? Do you get the distance between 2 touch points and measure them? can someone point me in the right direction :)
Thanks :P
Here is the end code, it works for zooming in and out as well as moving around the iPhone, good usage in IOS games
//Author DOMINIC OBOJKOVITS
var check : boolean = false;
var OPinchDist : float;
var currentDist : float;
var counter : float ;
var touchP : Vector2;
var thing : Transform;
var speed : float = 0.1;
var Osize : float;
function Start(){
iPhoneKeyboard.autorotateToPortrait = false;
iPhoneKeyboard.autorotateToPortraitUpsideDown = false;
iPhoneKeyboard.autorotateToLandscapeRight = false;
iPhoneKeyboard.autorotateToLandscapeLeft = false;
}
function Update () {
var count = Input.touchCount;
//Limits
Osize = Camera.main.orthographicSize;
if (Osize >= 12){
Osize = 12;
}
if (Osize <= 4){
Osize = 4;
}
speed = 0.05 * (Osize/5);
//Zooming Factor
if (count >= 2){
if (check == false){
OPinchDist = Vector2.Distance(Input.GetTouch(0).position,Input.GetTouch(1).position);
check = true;
}
currentDist = Vector2.Distance(Input.GetTouch(0).position,Input.GetTouch(1).position);
var zoomFactor = ( (OPinchDist) / (currentDist) );
Camera.main.orthographicSize = Osize * zoomFactor;
}
if (count <= 1){
check = false;
}
//Moves the camera around
if (Input.touchCount == 1 &&
Input.GetTouch(0).phase == TouchPhase.Moved) {
var touchDeltaPosition:Vector2 = Input.GetTouch(0).deltaPosition;
thing.Translate (-touchDeltaPosition.x * speed,-touchDeltaPosition.y * speed, 0);
}
}
Thanks for updating the question, but it still seems to be acting weird for me. Basically I put my 2 fingers down, and if I roll (yes roll, not even move ) the touch points closer together, the zoom rushes from wide to narrow. Did you do any fixes to this after? I know it's been ages :) Thanks!
Answer by WillTAtl · Nov 20, 2011 at 02:35 AM
Basically, you calcualte and store the distance between touches at the start of the zoom, and compare it to the distance between them to determine the zoom level along the way.
Calculating the distance between two touches is easy...
var pinchDistance = Vector3.Distance(touchPos1, touchPos2);
Then you'll calculate the basic scaling factor something like this...
var zoomFactor = (currentPinchDistance/originalPinchDistance);
this can be applied in several different ways depending on your project. In a a third-person perspective view, you might use this factor to adjust the distance of the camera from the object. With an orthographic camera, you would apply it to the camera's orthographicSize. In a first-person game for a sniper scope, you'd probably want to apply it to the camera's field of view. In most cases you could probably apply by just multiply it with the original value of those varibles before the pinch zoom started, ex, for orthographic camera...
Camera.main.orthographicSie = originalOrthoSize * zoomFactor;
Hope this helps!
This worked perfectly! Thank you so much, once you showed the code to get the distances between to touches everything else fell into place quite well :D
Do$$anonymous$$ic, would you $$anonymous$$d posting that code? For others, it doesn't fall into place just that well :) Thanks!
@rsrhcp Sure thing, ill add it in the question.. :P am working on some amazing game algorithms if you need other stuff
Your answer
Follow this Question
Related Questions
How to save data on iOS? 1 Answer
Strongly Typed Javascript on iOS 2 Answers
Magnifying Glass Unity iOS 0 Answers
Help converting javascript to ios iphone scripting 2 Answers