1
我想縮放上下文基於捏和進出的繪圖。這是完美的工作,但它會始終從原點放大(左上角)。這不會給你在其他應用程序中獲得的好效果,而且真的很煩人。舊的縮放方法如下:使用縮放但不使用變換方法縮放
- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender {
UIPinchGestureRecognizer *pinch = (UIPinchGestureRecognizer *)sender;
if ([pinch scale] > zoomLevel + MAX_ZOOM_PER_CALL) {
[pinch setScale: zoomLevel + MAX_ZOOM_PER_CALL];
}
if ([pinch scale] < zoomLevel - MAX_ZOOM_PER_CALL) {
[pinch setScale:zoomLevel - MAX_ZOOM_PER_CALL];
}
float prevZoomLevel = zoomLevel;
CGFloat factor = [pinch scale];
zoomLevel = factor;
if (zoomLevel < MIN_ZOOM_LEVEL) {
zoomLevel = MIN_ZOOM_LEVEL;
}
if (zoomLevel > MAX_ZOOM_LEVEL) {
zoomLevel = MAX_ZOOM_LEVEL;
}
//The next piece of code is added here
[self setNeedsDisplay];
}
實際縮放是在上下文中顯示的零件的繪製方法中完成的。我正在考慮改變屏幕的原點(即要繪製的項目的相對原點),以便模擬這一點。但它不工作,這就是我現在所擁有的:
float dZoomLevel = zoomLevel - prevZoomLevel;
if (dZoomLevel != 0) {
CGPoint touchLocation = [pinch locationInView:self];
CGPoint zoomedTouchLocation = CGPointMake(touchLocation.x * prevZoomLevel, touchLocation.y * prevZoomLevel);
CGPoint newLocation = CGPointMake(touchLocation.x * zoomLevel, touchLocation.y * zoomLevel);
float dX = (newLocation.x - zoomedTouchLocation.x);
float dY = (newLocation.y - zoomedTouchLocation.y);
_originX += roundf(dX);
_originY += roundf(dY);
}
原點是從XML(所有元素的最小x和y)拍攝。它通常會介於12000和20000之間,但理論上可能介於0和100000之間。
我不確定自己是否清楚自己,但如果您需要任何信息或不明白某些事情,只需詢問我和我會嘗試儘快回覆。提前致謝!
你有使用手勢的原因,而不僅僅是使用scrollview縮放嗎? – Jaybit
沒有滾動視圖,繪圖繪製在視圖(CGContextRef)上。 – Manuel
您是否在縮放視圖(我正在閱讀的內容)方面遇到問題,或者您在縮放到觸摸位置時出現問題(附帶的代碼是什麼)? –