Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 246
#1

Рисование по точкам в Quartz 2D - Программирование iOS

23.10.2013, 09:52. Просмотров 818. Ответов 5
Метки нет (Все метки)

Нужно нарисовать точки, а потом их соединить линиями. А так же мне нужно узнать координаты этих точек (как по мне, то нужно узнать координаты UITouch). Как это можно реализовать?
Я нашел несколько примеров по рисованию, но там рисование проводится не отрывая палец(мышку). С графикой в XCode мне пока трудновато разобраться.

Из уроков, сделал кусок приложения, которое позволяет рисовать точки. Проблема в том, что не рисует линию между ними.
Должно быть как то так
создали точку 1,
создали точку 2, между ними вырисовывалась линия,
создали 3 точку, между 2 и 3 - линия и т.д.
Если 2 клика, то первая соединяется с последней (ну это так, в теории).
Мне, что бы с предыдущей соединяло

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
//
//  PaintViewController.m
//  Paint_1
//
//  Created by Admin on 21/10/2013.
//  Copyright (c) 2013 Viacheslav. All rights reserved.
//
 
#import "PaintViewController.h"
 
@interface PaintViewController ()
 
@end
 
@implementation PaintViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //Инициализация переменных
    red = 0.0/255.0;
    blue = 0.0/255.0;
    green = 0.0/255.0;
    
    brush = 10.0;
       
}
 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    mouseSwiped = NO;
    UITouch *touch = [touches anyObject];
    lastPoint = [touch locationInView:self.view];
}
 
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{   UITouch *touch = [touches anyObject];
    CGPoint currentPoint = [touch locationInView:self.view];
    lastPoint = currentPoint;
    
   
        UIGraphicsBeginImageContext(self.view.frame.size);
        [self.Canvas.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
        
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush);
        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        CGContextFlush(UIGraphicsGetCurrentContext());
        self.Canvas.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
}
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
//
//  PaintViewController.h
//  Paint_1
//
//  Created by Admin on 21/10/2013.
//  Copyright (c) 2013 Viacheslav. All rights reserved.
//
 
#import <UIKit/UIKit.h>
 
@interface PaintViewController : UIViewController
{
    CGPoint lastPoint;
    CGFloat red;
    CGFloat blue;
    CGFloat green;
    CGFloat brush;
    
    BOOL mouseSwiped;
}
@property (weak, nonatomic) IBOutlet UIImageView *Canvas;
 
 
@end
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 09:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рисование по точкам в Quartz 2D (Программирование iOS):

Quartz Display Services - Objective-C
День добрый , пишу под mac , но на с++ , но это не суть по сколько мне нужно применить технологию Quartz Display Services Может кто то...

Рисование фигур по точкам - C#
Здравствуйте! меня интересует такой вопрос: как мне нарисовать фигуры по двум точкам. Ниже приведен мой вариант, но у меня за начальную...

Рисование графика по точкам - C#
Великие умы, подскажите путь решения следующей проблемы: Имеется задача: нарисовать график по 256 точкам, которые в свою очередь...

Рисование фигур по вершинам(точкам) - C# WPF
Доброго дня. Есть такая задача, нужно в окне формы щелчками мыши задать точки(вершины), после того как точек например станет 4, по ним...

Рисование линий по точкам массива - C#
Есть двумерный массив, Point mas2 = new Point; который заполняется динамически. Этот массив содержит координаты точек. По этим точкам...

Рисование кривой Безье по трем точкам - C#
Доброго утра, форумчане. Надо нарисовать на форме кривую Безье по трём кликам мыши. Как такое реализовать? Можно ли это сделать с помощью...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
23.10.2013, 12:40 #2
Так попробуйте(самое базовое и медленное):
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#import <QuartzCore/QuartzCore.h>
...
@property (nonatomic, strong) NSMutableArray *allTouches;
...
 
- (void)viewDidLoad
{
  [super viewDidLoad];
  self.allTouches = [NSMutableArray array];
  self.view.multipleTouchEnabled = YES;
}
 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  [self.allTouches addObjectsFromArray:[touches allObjects]];
}
 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
  UIGraphicsBeginImageContextWithOptions(self.view.layer.bounds.size, NO, 0.0);
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSetLineWidth(context, 2.f);
  CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
  CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
  
  CGFloat rectSide = 10.f;
  CGRect pointRect = CGRectMake(0, 0, rectSide, rectSide);
  
  UITouch *firstTouch = [self.allTouches objectAtIndex:0];
  CGPoint firstPoint = [firstTouch locationInView:self.view];
  CGContextMoveToPoint(context, firstPoint.x, firstPoint.y);
  CGMutablePathRef path = CGPathCreateMutable();
  
  CGPathMoveToPoint(path, NULL, firstPoint.x, firstPoint.y);
  for (UITouch *touch in self.allTouches) {
    CGPoint point = [touch locationInView:self.view];
    pointRect.origin.x = point.x - rectSide/2;
    pointRect.origin.y = point.y - rectSide/2;
    CGContextAddEllipseInRect(context, pointRect);
    CGPathAddLineToPoint(path, NULL, point.x, point.y);
  }
  
  CGContextFillPath(context);
  CGContextAddPath(context, path);
  CGContextStrokePath(context);
  self.view.layer.contents = (id)UIGraphicsGetImageFromCurrentImageContext().CGImage;
  
  CGPathRelease(path);
  UIGraphicsEndImageContext();
}
 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)eventevent {
  [self.allTouches removeObjectsInArray:[touches allObjects]];
}
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 246
23.10.2013, 13:39  [ТС] #3
Ваш код реализует рисование точки при перетаскивании,а мне нужно что бы рисовало линию между двумя точками. У меня рисуются точки, нужно только как то их связать
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
23.10.2013, 14:00 #4
Поясните, в чем конкретно у вас проблема. Код, который рисует линию между точками, у вас есть:
Objective-C
1
2
3
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
Что вам еще надо?
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 246
23.10.2013, 14:11  [ТС] #5
Но линия не рисуется, рисуется точка. Мне нужно построить фигуру в которой я буду четко понимать ее границы, так как потом, требуется вычислить ее площадь
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
23.10.2013, 15:33 #6
Slava-hacker32, ах вы неблагодарный.
Надо вам? Сами и делайте.
Я много написал всего, из чего можно сделать что вам нужно.

Должно быть как то так
создали точку 1,
создали точку 2, между ними вырисовывалась линия,
создали 3 точку, между 2 и 3 - линия и т.д.
Если 2 клика, то первая соединяется с последней (ну это так, в теории).
Мне, что бы с предыдущей соединяло
Точки у меня "создаются", и даже в массив кидаются, и линии между ними рисуются, и даже несколько. И с первой соединить не проблема, там 1 строчку кода добавить...
Цитата Сообщение от Slava-hacker32 Посмотреть сообщение
,а мне нужно что бы рисовало линию между двумя точками.
Вы сами без понятия что вам надо, а еще и объяснить не можете что конкретно "надо".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 15:33
Привет! Вот еще темы с ответами:

Рисование отрезка по точкам (ошибки в работе) - C++
Есть программа, которая требует ввести точки начала и конца отрезка и рисует этот отрезок. Но она не работает. При попытке ввода значений...

Рисование линии по двут точкам (ЦВЕТ!!!) - Assembler
Люди подскажите как в этой программе поменять цвет линий. Программа работает по алгоритму Брезенхема строит линии по 2м точкам. Подскажите...

Рисование линии на панели по поставленным курсором точкам - C#
нужно чтобы при нажатии на панели на левую кнопку мыши под курсором появлялась точка и при нажатии так же на панели уже в другом месте...

Рисование ломанной линии по точкам которые ставит пользователь - C#
Преподаватель попросил выполнить данное задание &quot;Пользователь ставит точки на плоскости, прога отрисовывает ломанные линии с максимальной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.10.2013, 15:33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru