我有一个iCarousel
,其中包含一些位于屏幕底部下方的元素(即可以滚动到它们)。
我正在执行动画,我将CGAffineTransformMakeScale
应用于UIScrollView
,并且在这样做时,视图会缩小,但视图的其余部分将会缩放,但不会绘制任何内容。我知道这是因为在进行转换时该区域是屏幕外的,但我想知道如何解决这个问题。
理想情况下,当我开始变换时,它应该绘制轮播的全部内容,包括屏幕外的内容,然后执行缩放动画,这意味着显示以前屏幕外的某些区域。
在此处的图像中,最上面的切片显示屏幕底部的图像,截止,然后第二个图像在转换时显示它们,不再显示在屏幕的底部,但仍然截止位置。我希望在缩小视图时可以看到其余图像。
我该如何解决这个问题?
答案 0 :(得分:1)
我认为你正在做的是缩小滚动视图,而不是收缩滚动视图正在显示的内容。
我建议使用UIScrollView的缩放功能缩小内容。为了使其工作,所有内容必须包含在单个视图中。由于您似乎有多个图像(作为多个UIImageViews),您需要做的第一件事是创建一个通用的UIView并将所有UIImageViews添加为通用视图的子视图。
然后,要使用滚动视图的缩放功能,您需要执行以下操作。
<UIScrollViewDelegate>
协议viewForZoomingInScrollView
返回要缩放的视图
方法最后一点仅表示当您更改zoomScale
时,旧的zoomScale和新的zoomScale必须都在minimumZoomScale
和maximumZoomScale
之间。
在下面的示例代码中,我有一个滚动视图和一个UIImageView
被缩放和滚动。为了测试,我有几个按钮可以改变缩放级别。请注意,调整缩放级别后,我通过将最小和最大缩放比例设置为当前缩放比例来禁用缩放(防止用户更改缩放级别)。
@interface MainViewController () <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect frame = CGRectZero;
self.imageView.image = [UIImage imageNamed:@"SomeImage"];
frame.size = self.imageView.image.size;
self.imageView.frame = frame;
self.scrollView.minimumZoomScale = 1.0;
self.scrollView.maximumZoomScale = 1.0;
self.scrollView.zoomScale = 1.0;
self.scrollView.contentSize = frame.size;
self.scrollView.delegate = self;
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return( self.imageView );
}
- (void)adjustZoomLevel:(CGFloat)newZoom
{
if ( newZoom > self.scrollView.zoomScale )
{
self.scrollView.maximumZoomScale = newZoom;
[self.scrollView setZoomScale:newZoom animated:YES];
self.scrollView.minimumZoomScale = newZoom;
}
else
{
self.scrollView.minimumZoomScale = newZoom;
[self.scrollView setZoomScale:newZoom animated:YES];
self.scrollView.maximumZoomScale = newZoom;
}
}
- (IBAction)zoomInButtonPressed
{
[self adjustZoomLevel:self.scrollView.zoomScale * 1.25];
}
- (IBAction)zoomOutButtonPressed
{
[self adjustZoomLevel:self.scrollView.zoomScale * 0.80];
}
@end
答案 1 :(得分:0)
原来我需要做的就是为转盘内的clipsToBounds
个实例关闭scrollView
。 D'哦!