我有一個非常簡單的(很希望非常簡單)的問題。在Objective-C中,你如何在兩點之間繪製一條線並將其添加到UIView?我已用一個UIImageView和操縱其Transform
屬性試過,但最終用下面的代碼時,轉動線爲正方形或長方形:在UIView上畫一個5像素線
[[self tline] setFrame:CGRectMake(start.x, start.y, width, 5)];
[[self tline] setTransform:CGAffineTransformMakeRotation(angle)];
我有兩個CGPoints,start
和end
,我會喜歡在兩點之間畫一條動態的5px線,並將其添加到我的子視圖。
BK:
點start
是的地步用戶開始觸摸屏幕,點end
是用戶的手指是目前點。顯然這在遊戲過程中會發生很大的變化。我需要能夠移動這條線來連接這兩點。
我正在使用touchesBegan:, Moved:, and Ended:
方法來創建,移動和銷燬該行。
CoreGraphics中
我有以下代碼;我該如何添加這條線到self.view
?
CGContextRef c = UIGraphicsGetCurrentContext();
CGFloat color[4] = {1.0f, 1.0f, 1.0f, 0.6f};
CGContextSetStrokeColor(c, color);
CGContextBeginPath(c);
CGContextMoveToPoint(c, start.x, start.y);
CGContextAddLineToPoint(c, end.x, end.y);
CGContextSetLineWidth(c, 5);
CGContextSetLineCap(c, kCGLineCapRound);
CGContextStrokePath(c);
自定義的UIView:
#import <UIKit/UIKit.h>
@interface DrawingView : UIView
@property (nonatomic) CGPoint start;
@property (nonatomic) CGPoint end;
- (void)drawRect:(CGRect)rect;
@end
#import "DrawingView.h"
@implementation DrawingView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextSetLineCap(context, kCGLineCapSquare);
CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor); //change color here
CGFloat lineWidth = 5.0; //change line width here
CGContextSetLineWidth(context, lineWidth);
CGPoint startPoint = [self start];
CGPoint endPoint = [self end];
CGContextMoveToPoint(context, startPoint.x + lineWidth/2, startPoint.y + lineWidth/2);
CGContextAddLineToPoint(context, endPoint.x + lineWidth/2, endPoint.y + lineWidth/2);
CGContextStrokePath(context);
CGContextRestoreGState(context);
NSLog(@"%f",_end.x);
}
- (void)setEnd:(CGPoint)end
{
_end = end;
[self setNeedsDisplay];
}
@end
的drawRect:當我初始化視圖只叫...
Draw方法在UIViewController中:
- (void)drawTLine:(CGPoint)start withEndPoint:(CGPoint)end
{
[[self dview] setStart:start];
[[self dview] setEnd:end];
[[self dview] drawRect:[self dview].frame];
}
這是我如何添加圖紙視圖:
DrawingView* dview = [[DrawingView alloc] initWithFrame:self.view.frame];
[dview setBackgroundColor:[UIColor clearColor]];
[self.view addSubview:dview];
的形狀,你可以多放點與
addLineToPoint:
方法和完成使用closePath
方法你有沒有考慮過Core Graphics,使用UIView的'draw:'方法? – bgoers 2013-03-27 20:39:09如果我使用繪製方法,我將如何跟蹤線條?我需要能夠移動它,調整它的大小,並根據需要銷燬它。 – David 2013-03-27 20:41:10
那麼在你移動的事件中,你可以更新一個屬性/變量來跟蹤當前位置。每次更新都會調用'draw:'方法,因此您只需在開始和當前之間繪製一個點,並刪除所有舊線。清除是非常簡單的,因爲這裏概述 - > http://stackoverflow.com/a/7907669/1415949 – bgoers 2013-03-27 20:43:15