简单绘图

来源:互联网 发布:优质三坐标编程 编辑:程序博客网 时间:2024/05/17 05:07

原地址: iOS 5 View Programming & Drawing

1.创建一个工程,选择Single View Application.命名为Circle.

2 创建一个Object-C文件,选择父类UIView,将其命名为CircleView,保存,然后在CircleView.h中添加属性scale.

3.打开CircleViewController.xib.添加View,并将其类名设置为CircleView.然后在其下方再拖入slider控件.

4.分别选中改view和slider控件,按下control键,拉线至CircleViewController.h ,创建输出口.选中slide控件,按下ctr键,拉线至CircleViewController.h,创建Action.

5.在CircleViewController.h中导入CircleView类.并在其实现类中,完善slide--Action的方法.

6.在CircleView中对绘图做处理.

相关代码如下:

CircleViewController.h

#import <UIKit/UIKit.h>#import "CircleView.h"@interface CircleViewController : UIViewController{    CircleView *circle;    UISlider *slider; }@property (strong, nonatomic) IBOutlet CircleView *circle;@property (strong, nonatomic) IBOutlet UISlider *slider;- (IBAction)slide:(id)sender;@end

CircleViewController.m

#import "CircleViewController.h"@interface CircleViewController ()@end@implementation CircleViewController@synthesize circle;@synthesize slider;- (void)viewDidLoad{    [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.}- (void)viewDidUnload{    [self setCircle:nil];    [self setSlider:nil];    [super viewDidUnload];    // Release any retained subviews of the main view.}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);}- (IBAction)slide:(id)sender {    UISlider *s = sender;    self.circle.scale = s.value;    [self.circle setNeedsDisplay];}@end

CircleView.h

#import <UIKit/UIKit.h>@interface CircleView : UIView@property  double scale;@end

CircleView.m

#import "CircleView.h"@implementation CircleView@synthesize scale;- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        [self setup];        // Initialization code    }    return self;}- (void)awakeFromNib{    [self setup];}- (void)setup{    self.contentMode = UIViewContentModeRedraw;}- (void)drawCircle:(CGPoint)p withRadius:(CGFloat)radius inContext:(CGContextRef)context{UIGraphicsPushContext(context);CGContextBeginPath(context);CGContextAddArc(context, p.x, p.y, radius, 0, 2*M_PI, YES);CGContextStrokePath(context);UIGraphicsPopContext();}- (void)drawRect:(CGRect)rect{CGPoint point;point.x = self.bounds.origin.x + self.bounds.size.width/2;        point.y = self.bounds.origin.y + self.bounds.size.height/2;    CGFloat size = self.bounds.size.width / 2;if (self.bounds.size.height < self.bounds.size.width) size = self.bounds.size.height / 2;size *= 0.90;        if (self.scale >=  0) size *= self.scale;    CGContextRef context = UIGraphicsGetCurrentContext();    CGContextSetLineWidth(context, 5.0);[[UIColor redColor] setStroke];    [self drawCircle:point withRadius:size inContext:context];}@end

           根据slide的value值的大小而改变CircleView的view.

  • 当需要重新绘制试图时,ios调用drawRect 重画视图内容.
  • drawRect不会被直接调用.
  • 当发送 setNeedsDisplay 消息时,drawRect方法就被调用.








原创粉丝点击