問題描述
使用捏合手勢縮放 UIImageView 的問題 (Problem scaling UIImageView with Pinch Gesture)
I have a program that creates a small UIImageView that responds to touch so you can drag it around the superview.
I added a UIPinchGestureRecognizer in order to Scale the image up and down. With the current code, the image scales up and down perfectly but restarts at scale 1.0 when a new pinch gesture starts.
I tried using contentScaleFactor to get the initial ImageView scale but it's always 1.0, so clearly the below code won't work properly.
‑ (void)doPinch:(UIPinchGestureRecognizer *)pinch {
if (pinch.state == UIGestureRecognizerStateBegan) {
initialScale = dragImage.contentScaleFactor;
} else {
CGFloat newScale = initialScale * pinch.scale;
CGAffineTransform transform = CGAffineTransformMakeScale(newScale,newScale);
dragImage.transform = transform;
}
}
This code was adapted from the "Pinch me" example in the Apress Beginning iPhone 4 Development book.
Since contentScaleFactor doesn't work, do I need to use a core graphics property? Does CGAffineTransformScale have something to do with it?
Thanks!
‑‑‑‑‑
參考解法
方法 1:
contentScaleFactor doesn't do what you think it does ... what you want is to replace this line:
initialScale = dragImage.contentScaleFactor;
with
initialScale = dragImage.transform.a;
... and you'll be a happy camper ("a" represents the x scale factor of the transformation matrix currently applied to dragImage).