我有一个UIScrollView,里面装满了UIImageView。 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中)......
对不起另一个初学者问题,但我真的需要帮助 提前谢谢。
答案 0 :(得分:0)
如果不亲自尝试,我的第一个猜测就是UIImageView上的变换也会改变它的帧。解决这个问题的一种方法是将UIImageView放在另一个UIView中,并将UIView放在UIScrollView中。您的手势识别器和转换仍将在UIImageView上。确保UIView的clipsToBounds属性设置为YES。