注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

融智技术学院

融智技术学院163分站,为广大好友提供更多的帮助

 
 
 

日志

 
 

【iPhone每日一问】在iOS的绘图橡皮擦为什么不工作?  

2014-03-17 15:14:16|  分类: iPhone |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
问:

我正在从事与一个绘图的项目,在此项目中我一个橡皮擦的选项。下面给出的代码是当我开始我的应用程序,并画出一些线条和继续使用的橡皮擦。它工作得很好,我也得到了橡皮擦效果。现在,第二个方案是我画了10条线条,然后单击“撤消按钮”,并撤消了整个事情,然后,我重做整个事情,而现在,当我点击“橡皮擦按钮”,并尝试删除某个部分,但相反,它将会清除整个绘图。这是我尝试想弄清楚的,但我不理解我什么地方错了,所以朋友们,请帮助我。

以下是我的代码:

  • - (void)drawRect:(CGRect)rect
  • {
  •       case DRAW:
  •     {
  •         [m_curImage drawAtPoint:CGPointMake(0, 0)];
  •         CGPoint mid1 = midPoint(m_previousPoin 

    这解决了我的问题,如果任何人有同样的问题,请实现这个。

    t1, m_previousPoint2);
  •         CGPoint mid2 = midPoint(m_currentPoint, m_previousPoint1);
  •         CGContextRef context = UIGraphicsGetCurrentContext();
  •         [self.layer renderInContext:context];
  •         CGContextMoveToPoint(context, mid1.x, mid1.y);
  •         CGContextAddQuadCurveToPoint(context, m_previousPoint1.x, m_previousPoint1.y, mid2.x, mid2.y);
  •         CGContextSetLineCap(context, kCGLineCapRound);
  •         CGContextSetLineWidth(context, self.lineWidth);
  •         CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor);
  •         CGContextSetAlpha(context, self.lineAlpha);
  •         CGContextSetAllowsAntialiasing(context, YES);
  •         CGContextStrokePath(context);
  •        //            [super drawRect:rect];          
  •     }
  •          break;
  •         case ERASE:
  •         {
  •             [m_curImage drawAtPoint:CGPointMake(0, 0)];
  •             CGContextRef context = UIGraphicsGetCurrentContext();    
  •             CGContextClearRect(context, rect);               
  •             CGContextSetBlendMode(context, kCGBlendModeClear);
  •             [super drawRect:rect];
  •             break;               
  •   }     
  •         case UNDO:
  •         {
  •             [m_curImage drawInRect:self.bounds];
  •              break;
  •         }
  •         case REDO:
  •         {
  •             [m_curImage drawInRect:self.bounds]; 
  •              break;          
  •         }
  •         default:
  •             break;
  •     }   
  • }

这里有一些函数它是运行的,当我撤消/重做。代码如下;

  • -(void)redrawLine
  • {
  •     UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0f);
  •     [self.layer renderInContext:UIGraphicsGetCurrentContext()];
  •     NSDictionary *lineInfo = [m_lineArray lastObject];
  •     m_curImage = (UIImage*)[lineInfo valueForKey:@"IMAGE"];
  •     UIGraphicsEndImageContext();
  •     [self setNeedsDisplayInRect:self.bounds];  
  • }
  • -(void)undoButtonClicked
  • {
  •     if([m_lineArray count] > 0)
  •     {
  •         NSMutableArray *line = [m_lineArray lastObject];
  •         [m_bufferArray addObject:line];
  •         [m_lineArray removeLastObject];
  •         [self redrawLine];
  •     }
  •     m_drawStep = UNDO;
  • }
  • -(void)redoButtonClicked
  • {
  •     if([m_bufferArray count] > 0)
  •     {
  •         NSMutableArray *line = [m_bufferArray lastObject];
  •         [m_lineArray addObject:line];
  •         [m_bufferArray removeLastObject];       
  •         [self redrawLine];
  •     }
  •      m_drawStep = REDO;
  • }

请告诉我是否这样做是正确的。

问候

Ranjit

答:

我已经解决了这个问题,下面是一个完美的代码:

  • case :ERASE
  • {
  •  CGPoint mid1 = midPoint(m_previousPoint1, m_previousPoint2);
  •             CGPoint mid2 = midPoint(m_currentPoint, m_previousPoint1);
  •             [m_curImage drawAtPoint:CGPointMake(0, 0)];
  •             CGContextRef context = UIGraphicsGetCurrentContext();
  •             [self.layer renderInContext:context];
  •             CGContextMoveToPoint(context, mid1.x, mid1.y);
  •             CGContextAddQuadCurveToPoint(context, m_previousPoint1.x, m_previousPoint1.y, mid2.x, mid2.y);
  •             CGContextSetLineCap(context, kCGLineCapRound);
  •             CGContextSetBlendMode(context, kCGBlendModeClear);
  •             CGContextSetLineJoin(context, kCGLineJoinRound);
  •             CGContextSetLineWidth(context, self.lineWidth);
  •             CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor);
  •             CGContextSetShouldAntialias(context, YES); 
  •             CGContextSetAllowsAntialiasing(context, YES);
  •             CGContextSetFlatness(context, 0.1f);
  •  
  •             CGContextSetAlpha(context, self.lineAlpha);
  •             CGContextStrokePath(context);
  • }

问候Ranjit 

这解决了我的问题,如果任何人有同样的问题,请实现这个。

  评论这张
 
阅读(9)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017