我是Quartz2d的新手,所以我希望这是一个容易回答的问题。
我有一个滚动视图,其内容框架为1024x768。在此我推出一个自定义视图(框架1024x768)使用Quartz2d做一些绘图。我的想法是,我有一个很大的区域,用户可以滚动查看不同的部分。
我遇到的问题是,当我滚动设备时,我会收到内存警告错误或可怕的滚动性能。这无疑是因为我正在重新绘制整个1024x768字段。我认为将剪切路径设置为UIScrollView偏移量将有所帮助..它确实..直到我滚动..在这种情况下视图不会重绘,直到滚动停止。告诉视图在scrollViewDidScroll期间绘制也会导致性能不佳
谁能告诉我如何优化我的绘图程序?
我有两张图片..其中一张被遮盖,两张都被画在屏幕上(一张在另一张上面)
- (void)drawRect:(CGRect)dirtyRect {
CGContextRef myContext = UIGraphicsGetCurrentContext();
// get our offset (where we've scrolled to)
CGPoint offset = scrollView.contentOffset;
// clip to our offset.. uncomment for good performance but terrible scrolling
//CGContextClipToRect(myContext, CGRectMake(offset.x, offset.y, 480, 320));
// make an image from the mask context
CGImageRef aMaskImage = CGBitmapContextCreateImage (myMaskContext);
// mask the first image
CGImageRef aImage = CGImageCreateWithMask(myImageRef1, aMaskImage);
CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), myImageRef1);
CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), aImage);
CGImageRelease(aImage);
CGImageRelease(aMaskImage);
}
CGContextRef myContext = UIGraphicsGetCurrentContext();
// get our offset (where we've scrolled to)
CGPoint offset = scrollView.contentOffset;
// clip to our offset.. uncomment for good performance but terrible scrolling
//CGContextClipToRect(myContext, CGRectMake(offset.x, offset.y, 480, 320));
// make an image from the mask context
CGImageRef aMaskImage = CGBitmapContextCreateImage (myMaskContext);
// mask the first image
CGImageRef aImage = CGImageCreateWithMask(myImageRef1, aMaskImage);
CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), myImageRef1);
CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), aImage);
CGImageRelease(aImage);
CGImageRelease(aMaskImage);
提前感谢您提供的任何帮助!
答案 0 :(得分:0)
一般来说,为了优化滚动大的东西,你会看到CATiledLayer。
答案 1 :(得分:0)
我假设你打电话给setNeedsDisplay
。您需要致电setNeedsDisplayInRect
。确保只传递更改的矩形。