UItouch *touch = [touches anyObject]; CGPoint currentPoint = [touch locationInVIEw:drawImage]; UIGraphicsBeginImageContext(drawImage.frame.size); [drawImage.image drawInRect:CGRectMake(0,drawImage.frame.size.wIDth,drawImage.frame.size.height)]; CGContextSetlineCap(UIGraphicsGetCurrentContext(),kCGlineCapRound); CGContextSetlinewidth(UIGraphicsGetCurrentContext(),size); CGContextSetRGBstrokecolor(UIGraphicsGetCurrentContext(),r,g,b,a); CGContextBeginPath(UIGraphicsGetCurrentContext()); CGContextMovetoPoint(UIGraphicsGetCurrentContext(),lastPoint.x,lastPoint.y); CGContextAddlinetoPoint(UIGraphicsGetCurrentContext(),currentPoint.x,currentPoint.y); CGContextstrokePath(UIGraphicsGetCurrentContext()); drawImage.image = UIGraphicsGetimageFromCurrentimageContext(); UIGraphicsEndImageContext();
我的问题是我想要用一个点来着色,但我想使用一个重复的特定图像(作为一个png图像)
可能吗?
UIImage *brushImage = [UIImage imagenamed:@"brush.png"];[brushImage drawAtPoint:CGPointMake(currentPoint.x-brushImage.size.wIDth/2,currentPoint.y-brushImage.size.height/2)];
这将每个周期仅绘制一次图像,而不是连续线.如果您想要画笔的实线,请参阅Objective C: Using UIImage for Stroking.
这可能会在每次调用此方法时最终加载图像文件,从而使其变慢.虽然[UIImage imagenamed:]的结果经常被缓存,但我的代码可以通过存储刷子以便以后重用来改进.
说到性能,请在旧设备上进行测试.正如所写,它适用于我的第二代iPod touch,但任何添加都可能使它在第二代和第三代设备上口吃.由@Armaan推荐的Apple的GLPaint示例使用OpenGL进行快速绘图,但涉及的代码要多得多.
此外,您似乎在视图中进行交互(touchesBegan:,touchesMoved:,touchesEnded :),然后将其内容绘制到drawImage,可能是UIImageVIEw.可以存储绘画图像,然后将此视图的图层内容设置为该图像.这不会改变性能,但代码会更清晰.如果继续使用drawImage,请使用其ivar通过属性访问它.
总结以上是内存溢出为你收集整理的IOS:在视图中绘制图像全部内容,希望文章能够帮你解决IOS:在视图中绘制图像所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)