UIScrollView 和 zoomScale

Posted

技术标签:

【中文标题】UIScrollView 和 zoomScale【英文标题】:UIScrollView and zoomScale 【发布时间】:2012-10-31 14:27:42 【问题描述】:

我有一个滚动视图和两个子视图,其中一个图像视图和一个按钮视图包含一些与图像视图有线条的热点。我想放大/缩小并相应地移动热点。我遇到的问题是我无法将热点保持在我想要的位置并且在这里找不到解决方案。

这是我在 viewDidLoad 中的代码

- (void)viewDidLoad

    [super viewDidLoad];

    // set the tag for the image view
    [imageView setTag:ZOOM_VIEW_TAG];

    imageScrollView.delegate = self;

    float sexy = [imageScrollView frame].size.height  / [imageView frame].size.height;
    initialZoom = sexy;
    [imageScrollView setZoomScale:sexy animated:NO];
    [imageScrollView setMinimumZoomScale:sexy];
    [imageScrollView setContentInset:UIEdgeInsetsMake(-30, 0, 0, 0)];
    scaleStart =  imageScrollView.zoomScale;
    buttonView = [[UIView alloc]init];
    buttonView.frame = imageScrollView.frame;

    [imageScrollView addSubview:buttonView];

    button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self
               action:@selector(buttonClicked:)
     forControlEvents:UIControlEventTouchDown];
    [buttonView addSubview:button];

    [button setTitle:@"Button x" forState:UIControlStateNormal];

    button.frame = CGRectMake(200.0, 400.0, 520.0, 150.0);
    imageView.center = self.view.center;
    imageScrollView.maximumZoomScale = MAX_ZOOM_SCALE;

    //setting an orientation notifier
    UIDevice *device = [UIDevice currentDevice];                    //Get the device object
    [device beginGeneratingDeviceOrientationNotifications];         //Tell it to start monitoring the accelerometer for orientation
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];    //Get the notification centre for the app
    [nc addObserver:self                                            //Add yourself as an observer
           selector:@selector(orientationChanged:)
               name:UIDeviceOrientationDidChangeNotification
             object:device];    
  

我正在尝试在

中实现我的其余代码
- (void)scrollViewDidZoom:(UIScrollView *)aScrollView 

没有任何运气使用 aScrollView.zoomScale 属性。

并将按钮视图移动到正确的位置。我遇到的问题是,当我放大(完全放大)时,缩放比例为 0.53454,而当我(完全)缩小时,我得到的值为 0.37261,为什么会发生这种情况,我没有再次获得第一个价值?

我怎样才能做我想做的事?

在放大/缩小时我想要谷歌地图之类的东西,并且地点保持在原位而不放大自身。

【问题讨论】:

【参考方案1】:

这个怎么样?

如果您希望某些东西在缩放时保持自己的比例,您可以创建另一个包含它的视图。这就像将一个视图分为两个视图。一个负责缩放,另一个负责处理保持比例的东西。这就是我这样做的原因。

【讨论】:

以上是关于UIScrollView 和 zoomScale的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView

UIScrollView 内 UIScrollView 内 UIScrollView

ios: uiscrollview 和 uiview 自动布局

如何使在Swift中使用UIScrollView进行滚动和缩放

UICollectionViewCell 和 UIScrollView

UIScrollView和UIPageControl结合使用