У меня очень простой (надеюсь очень простой) вопрос. Как в Objective-C нарисовать линию между двумя точками и добавить ее в UIView? Я пытался использовать UIImageView и манипулировать его свойством Transform
, но в итоге линия превратилась в квадрат или прямоугольник при использовании следующего кода:
[[self tline] setFrame:CGRectMake(start.x, start.y, width, 5)];
[[self tline] setTransform:CGAffineTransformMakeRotation(angle)];
У меня есть две CGPoints, start
и end
, и я хотел бы нарисовать динамическую линию 5px между двумя точками и добавить ее в свое подпредставление.
БК:
Точка 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);
Пользовательский интерфейс:
#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: вызывается только при инициализации представления...
Метод рисования в 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];
draw:
UIView? - person anon_dev1234   schedule 28.03.2013draw:
вызывается при каждом обновлении, поэтому вы просто рисуете точку между начальной и текущей и стираете все старые линии. Очистка довольно проста, как описано здесь - › stackoverflow.com/a/7907669/1415949 - person anon_dev1234   schedule 28.03.2013viewDidLoad:
. Затем в своем пользовательском представлении реализуйте методdrawRect:
— после его реализации он автоматически вызывается при каждом прогоне цикла событий. Я бы посоветовал прочитатьUIView
иCoreGraphics
в документации Apple. - person anon_dev1234   schedule 28.03.2013