UIScrollView中的drawRect裁剪
Posted
技术标签:
【中文标题】UIScrollView中的drawRect裁剪【英文标题】:drawRect cropping in UIScrollView 【发布时间】:2012-02-07 09:45:04 【问题描述】:我正在尝试将图像绘制到覆盖 drawRect 的 UIView 子类中。这个图像绘制类需要移动和缩放功能,所以我把它做成了滚动视图的子视图。
我的问题是我的图像似乎被屏幕或滚动视图边界裁剪(图像大于屏幕)。我不知道为什么,这似乎是非常基本的东西。
我的 ViewController 中的视图层次结构如下所示:
View Controller
View
ScrollView
MapView
我已经为滚动视图和地图视图(这是实现 drawRect 的视图)创建了出口。
用于配置滚动视图的 ViewController 初始设置代码如下所示:
- (void)viewDidLoad
[super viewDidLoad];
scrollView.delegate = self;
scrollView.contentSize = CGSizeMake(450, 476);
scrollView.minimumZoomScale = 0.6;
scrollView.maximumZoomScale = 6.0;
我的 drawRect 实现:
- (void)drawRect:(CGRect)rect
UIImage *myImage = [UIImage imageNamed:@"map.jpg"];
CGRect rectangle = CGRectMake(0,0,450,476);
[myImage drawInRect:rectangle];
图像在滚动视图中是可拖动和可缩放的,但它似乎在屏幕边界处被裁剪。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:drawRect 不能在作为参数传递给 drawRect 方法的 rect 之外绘制,这是由视图框架决定的。使您的视图为 1200,1200,并确保在所有包含视图上禁用 clipToBounds。
【讨论】:
好的,我猜这就是我的视图框架的作用。感谢您提供的信息,这是有道理的。 是的,完全正确。设置视图框架(实际上它是 view.bounds,从技术上讲,但它们通常是相同的)并 drawRect 绘制该框架的内容。【参考方案2】:您的问题可能出在drawInRect
。来自 UIImage 类的文档:
drawInRect:
Draws the entire image in the specified rectangle, scaling it as needed to fit.
根据需要将该矩形放大,并将其置于 UIImageView 的中心。这个问题在这里回答UIScrollView image/photo viewer with paging enabled and zooming
【讨论】:
您好,感谢您的回复。但是如果我将代码更改为 CGRect rectangle = CGRectMake(0,0,1200,1200);它还在被裁剪。我发布的代码中的矩形尺寸是图像的实际尺寸。 看看我上面贴的链接。有示例代码和 WWDC 视频如何从苹果制作整个照片应用程序。搜索移动和缩放。 好的,使用你的链接我发现我需要为我的 mapView 设置一个框架,使用:CGRect mapFrame; mapFrame.origin = CGPointMake(0, 0); mapFrame.size = CGSizeMake(450, 476); mapView.frame = mapFrame;以上是关于UIScrollView中的drawRect裁剪的主要内容,如果未能解决你的问题,请参考以下文章
drawRect 使 UIScrollView 中的滚动变慢
在 UIScrollView 中覆盖 drawRect 时的黑色背景
绘图 + UITableViewCell + UIScrollView 子类?
UIScrollView 中的 UIView 子类如何处理内存