简单绘图

原地址: 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方法就被调用.








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值