Как увеличить масштаб до центра с помощью scrollview?

Ранее мы реализовали нажатие, чтобы увеличить масштаб, и теперь мы решили использовать значки вместо этого, чтобы увеличить масштаб центра отображаемых в настоящее время, и мы хотели бы повторно использовать код, который у нас был для нашего крана, для увеличения, поскольку мы хотим, чтобы тот же эффект, но теперь мы не знаем, что передать в качестве центральной точки.

Мы используем

(CGRect) zoomRectForScale: (float) scale withCenter: (CGPoint) центр

метод, используемый для приема центральной cgpoint из распознавателя жестов, который мы использовали для масштабирования крана; однако, поскольку мы больше не используем распознаватель жестов, нам нужно выяснить, что cgpoint передать. Кроме того, этот метод работал для масштабирования крана, поэтому я не думаю, что это проблема, с которой мы столкнулись.

Мы попытались сделать это

centerPoint = [scrollView contentOffset]; centerPoint.x += [scrollView frame].size.width / 2; centerPoint.y += [scrollView frame].size.height / 2; CGRect zoomRect = [self zoomRectForScale:newScale withCenter:centerPoint]; 

Который должен рассчитать текущий центр, а затем передать его zoomRectForScale, однако он не работает (он масштабируется справа от центра).

Я думаю, что проблема, вероятно, имеет какое-то отношение к тому факту, что мы передаем центр изображения до применения масштабирования, и, возможно, мы должны проходить масштабированный центр. Кто-нибудь имеет какой-либо опыт с этим или какие-либо идеи о том, как мы должны рассчитывать центр?

One Solution collect form web for “Как увеличить масштаб до центра с помощью scrollview?”

Мы получили его работу, и я думал, что опубликую то, что мы закончили

  /** Function for the scrollview to be able to zoom out **/ -(IBAction)zoomOut { float newScale = [scrollView zoomScale] / ZOOM_STEP; [self handleZoomWith:newScale andZoomType: FALSE]; } /** Function for the scrollview to be able to zoom in **/ -(IBAction)zoomIn { float newScale = [scrollView zoomScale] * ZOOM_STEP; [self handleZoomWith:newScale andZoomType: TRUE]; } -(void)handleZoomWith: (float) newScale andZoomType:(BOOL) isZoomIn { CGPoint newOrigin = [zoomHandler getNewOriginFromViewLocation: [scrollView contentOffset] viewSize: scrSize andZoomType: isZoomIn]; CGRect zoomRect = [self zoomRectForScale:newScale withCenter:newOrigin]; [scrollView zoomToRect:zoomRect animated:YES]; } 

а затем в классе zoomHandler мы имели это

 -(CGPoint) getNewOriginFromViewLocation: (CGPoint) oldOrigin viewSize: (CGPoint) viewSize andZoomType:(BOOL) isZoomIn { /* calculate original center (add the half of the width/height of the screen) */ float oldCenterX = oldOrigin.x + (viewSize.x / 2); float oldCenterY = oldOrigin.y + (viewSize.y / 2); /* calculate the new center */ CGPoint newCenter; if(isZoomIn) { newCenter = CGPointMake(oldCenterX * zoomLevel, oldCenterY * zoomLevel); } else { newCenter = CGPointMake(oldCenterX / zoomLevel, oldCenterY / zoomLevel); } /* calculate the new origin (deduct the half of the width/height of the screen) */ float newOriginX = newCenter.x - (viewSize.x / 2); float newOriginY = newCenter.y - (viewSize.y / 2); return CGPointMake(newOriginX, newOriginY); } 
Interesting Posts

Доступ к метке, созданной в раскадровке на текущем ViewController

Xcode 6 GM – CLLocationManager

загрузка файла nib, который создается из раскадровки

Невозможно установить начальный контроллер просмотра в новой раскадровке в Xcode 6

Делегаты кнопок UIAlertController не запускаются (в Modally Segue)

Вычислить исходное положение UITextField

Как сравнить два NSMutableArrays?

Какая версия sqlite предоставляет iOS?

UIView drawRect: нарисуйте перевернутые пиксели, сделайте отверстие, окно, отрицательное пространство

Есть ли более простой способ обработки многих частей данных в приложении ios?

Контроллер навигации по раскадровке и контроллер панели вкладок

XMPPFramework – Как я могу получить список друзей в Интернете и офлайн?

Использование Handoff с Watchkit для вывода приложения iPhone на передний план

locationManager: didUpdateLocations: всегда вызывается несколько раз

CALayer autoresizingMask не для SDK для iOS?

PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.