2

我有一个用 UIImageView 填充的 UIScrollView。UIScrollView 启用分页以让用户“翻转”这些图像。每个 UIImageView 都有用于缩放缩放的 UIPinchGestureRecognizer 和用于在放大时平移该图像的 UIPanGestureRecognizer。
您可能已经注意到,我想要实现的就像 iBooks 在其应用程序中所做的一样。

但是,我很难完成这项工作。

在我的“BookPageViewController”中,我设置了 UIScrollView,然后根据来自 sqlite 的数据(页码、文件名等)用文件夹中的图像填充它们。

_pageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

NSUInteger pageCount = [pages count];

for (int i = 0; i < pageCount; i++) {

    CGFloat x = i * self.view.frame.size.width;

    // Page Settings
    UIImageView *pageView = [[UIImageView alloc] initWithFrame:CGRectMake(x, 0, self.view.frame.size.width, self.view.frame.size.height)];

    pageView.backgroundColor = [UIColor greenColor];
    pageView.image = [pages objectAtIndex:i];
    pageView.userInteractionEnabled = YES;
    pageView.tag = i;

    // Gesture Reocgnisers
    UIPinchGestureRecognizer *pinchGr = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchImage:)];
    pinchGr.delegate = self;
    [pageView addGestureRecognizer:pinchGr];

    UIPanGestureRecognizer *panGr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panImage:)];
    [pageView addGestureRecognizer:panGr];

    // Finally add this page to the ScrollView
    [_pageScrollView addSubview:pageView];
}  

_pageScrollView.contentSize = CGSizeMake(self.view.frame.size.width * pageCount, self.view.frame.size.height);
_pageScrollView.pagingEnabled = YES;
_pageScrollView.delegate = self;

[self.view addSubview:_pageScrollView];  

在 Stackoverflow 中另一个好问题的帮助下,我提出了这些问题:

- (void) pinchImage:(UIPinchGestureRecognizer*)pgr {

  [self adjustAnchorPointForGestureRecognizer:pgr];

  if ([pgr state] == UIGestureRecognizerStateBegan || [pgr state] == UIGestureRecognizerStateChanged) {
    if ([pgr scale]) {
        NSLog(@"SCALE: %f", [pgr scale]);
        [pgr view].transform = CGAffineTransformScale([[pgr view] transform], [pgr scale], [pgr scale]);
        [pgr setScale:1];
    } else {
        NSLog(@"[PAMPHLET PAGE]: The image cannot be scaled.");
    }
  }
}  

我的问题是,当我使用 Pinch Gesture 放大 UIImageView 之一时,图像超过(越过)到下一个图像并隐藏它。我相信应该有办法“限制”放大/缩小和 UIImageView 的大小(不是 UIImage 本身),但我不知道从这里去哪里。我还放了一个代码来限制规模,例如:

([pgr scale] > 1.0f && [pgr scale] < 1.014719) || ([pgr scale] < 1.0f && [pgr scale] > 0.98f)

但它没有用......

我知道这对 ios 专业人士来说并不难,但我对 Objective-c 还是很陌生,这是我第一次开发真正的应用程序。如果这不是一个好的做法,我也想知道任何想法来实现如何像 ibooks 那样做到这一点(例如,将 UIImageView 放在 UIScrollView 中,然后将 UIScrollView 放到另一个 UIScrollView 中)......

对不起,另一个初学者问题,但我真的需要帮助。
提前致谢。

4

1 回答 1

0

如果不亲自尝试,我的第一个猜测是 UIImageView 上的变换也会变换它的框架。解决这个问题的一种方法是将 UIImageView 放在另一个 UIView 中,然后将该 UIView 放在 UIScrollView 中。您的手势识别器和转换仍将在 UIImageView 上。确保 UIView 的 clipsToBounds 属性设置为 YES。

于 2013-03-25T11:45:38.320 回答