Я новый парень на этом блоке. Приятно с вами познакомиться.Цель C - Невозможно увеличить UIImageView, встроенный в UIScrollView
Я пытаюсь реализовать зуммирование Ray Wenderlich какого-либо права UIScrollView, который был описан здесь:
http://www.raywenderlich.com/10518/how-to-use-uiscrollview-to-scroll-and-zoom-content
Но казалось, что это не работает для меня. То, что я хотел бы сделать, это:
- Создайте UIImageView из наконечника.
- Добавить UIImageView в UIScrollView.
- Увеличьте его в центре изображения со шкалой 2 в начале представления, если приложение выполнено с iPad.
Вот мой код:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
//Hide the status bar
[[UIApplication sharedApplication] setStatusBarHidden:YES];
//------------------------------
//Initialize the image view of the home screen
_mapView = (TM_MapView *)[[[NSBundle mainBundle]loadNibNamed:@"MapView" owner:self options:nil]objectAtIndex:0];
// set the content size to be the size our our whole frame
mapScrollView.contentSize = _mapView.imageView.image.size;
[mapScrollView setScrollEnabled:YES];
//set the selector for the buttons in the map view
[self setButtonsSelector];
// now add our scroll view to the main view
[mapScrollView addSubview:_mapView];
//------------------------------
NSLog(@"_mapView.imageView.frame: %@", NSStringFromCGRect(_mapView.imageView.frame));
NSLog(@"_mapView.imageView.image.size: %@", NSStringFromCGSize(_mapView.imageView.image.size));
NSLog(@"mapScrollView.contentSize: %@", NSStringFromCGSize(mapScrollView.contentSize));
}
-(void)viewWillAppear:(BOOL)animated
{
mapScrollView.minimumZoomScale = 1.0f;
mapScrollView.maximumZoomScale = 2.5f;
mapScrollView.zoomScale = 1.0f;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
[self zoomOnStart];
}
}
-(void)zoomOnStart
{
NSLog(@"Zooming on start");
CGPoint zoomPoint = CGPointMake(512.0f, 384.0f);
CGFloat newZoomScale = 2.0f;
CGSize scrollViewSize = self.mapScrollView.bounds.size;
CGFloat w = scrollViewSize.width/newZoomScale;
CGFloat h = scrollViewSize.height/newZoomScale;
CGFloat x = zoomPoint.x - (w/2.0f);
CGFloat y = zoomPoint.y - (h/2.0f);
CGRect rectToZoomTo = CGRectMake(x, y, w, h);
//CGRect rectToZoomTo = CGRectMake(300, 300, 200, 100);
NSLog(@"rectToZoomTo: %@", NSStringFromCGRect(rectToZoomTo));
[self.mapScrollView zoomToRect:rectToZoomTo animated:YES];
}
#pragma mark - Delegates
-(UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView
{
NSLog(@"Scroll View viewForZoomingInScrollView");
return _mapView;
}
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
NSLog(@"Scroll View End Zooming!");
}
-(void)scrollViewDidZoom:(UIScrollView *)scrollView
{
NSLog(@"Scroll View Zoom changed to: %f", scrollView.zoomScale);
}
Как вы можете видеть, я вошел некоторые из кадров и делегатов, чтобы увидеть вход для масштабирования и посмотреть, будут ли мы или нет масштабирования. Вот журналы консоли:
2014-10-09 17:24:18.507 TrueMuzeiOS[13268:60b] _mapView.imageView.frame: {{0, 0}, {1024, 768}}
2014-10-09 17:24:18.511 TrueMuzeiOS[13268:60b] _mapView.imageView.image.size: {1024, 768}
2014-10-09 17:24:18.513 TrueMuzeiOS[13268:60b] mapScrollView.contentSize: {1024, 768}
2014-10-09 17:24:18.519 TrueMuzeiOS[13268:60b] Zooming on start
2014-10-09 17:24:18.521 TrueMuzeiOS[13268:60b] rectToZoomTo: {{320, 128}, {384, 512}}
Как вы можете видеть, журналы внутри viewForZoomingInScrollView:
, scrollViewDidEndZooming:withView:atScale:
и scrollViewDidZoom:
не дозвонились, то есть мы не масштабирование на всех (CMIIW). Я добавил UIScrollViewDelegate, чтобы он работал.
Итак, вы можете мне помочь? Я правильно выполнил шаги, ИМХО. Так что теперь я потерялся. Заранее большое спасибо.
спасибо. Это решило это для меня. :) Я думаю, что пропустил один из шагов этой статьи. Тот, где я должен установить делегата из раскадровки. Дурак я. –
Не проблема! Это ошибка, которую все сделали. Ура! – cris