ios 开发(二)设计模式

本文以一个小画板应用为例,探讨在iOS开发中如何运用设计模式,如MVC和Mediator模式。CanvasViewController、PaletteViewController和ThumbnailViewController遵循MVC模式,而Mediator模式用于协调不同视图间的交互。此外,利用Quartz 2D API实现画笔在UIView上的绘制,通过Dot、Vertex和Stroke类进行图形渲染,同时采用Proxy模式实现缩略图的异步加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面就用一个小画板的例子介绍一个设计模式在里面的作用。

www.objective-c-design-patterns.com

http://blog.youkuaiyun.com/wangeen/article/details/8272501

程序的GUI

小画板需要有画图的view还有设计画笔的view和缩略图显示的view,因为cocoa十分看重MVC模式,所有的显示都要基于这样的模式,也就是每一个view都必须有一个controller

CanvasViewController

PaletteViewController

ThumbnailViewController

当所有的view和controller都设计好之后,一个问题就是这些view之间相互切换怎么做比较好,这里就需要一个mediator的模式来做。


画笔的显示

cocoa touch提供了quartz 2d在UIView来画图,API如下

CGContextMoveToPoint()

CGContextAddLineToPoint()

CGContextStrokePath() 等等

Dot:

   (void) drawWithContext:(CGContextRef)context
{
   CGFloat x = self.location.x;
   CGFloat y = self.location.y;
   CGFloat frameSize = self.size;
   CGRect frame = CGRectMake(x - frameSize / 2.0,
                             y - frameSize / 2.0,
                             frameSize,
                             frameSize);
   CGContextSetFillColorWithColor (context,[self.color CGColor]);
   CGContextFillEllipseInRect(context, frame);
}

vertex:

- (void) drawWithContext:(CGContextRef)context
{
  CGFloat x = self.location.x;
  CGFloat y = self.location.y;
  CGContextAddLineToPoint(context, x, y);
}

stroke:

- (void) drawWithContext:(CGContextRef)context
{
  CGContextMoveToPoint(context, self.location.x, self.location.y);
  for (id <Mark> mark in children_)
  {
    [mark drawWithContext:context];
  }
  CGContextSetLineWidth(context, self.size);
  CGContextSetLineCap(context, kCGLineCapRound);
  CGContextSetStrokeColorWithColor(context,[self.color CGColor]);
  CGContextStrokePath(context);
}


Thumbnail的显示

由于显示所有的文档的时间比较长,所以这个比较适合proxy,用多线程来加载。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值