Форум программистов, компьютерный форум, киберфорум
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
7 / 7 / 2
Регистрация: 16.11.2011
Сообщений: 251

Рисование по точкам в Quartz 2D

23.10.2013, 09:52. Показов 1614. Ответов 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
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.10.2013, 09:52
Ответы с готовыми решениями:

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

Рисование по вершинам(точкам)
Доброй ночи уважаемые форумчане. Сразу перейду к вопросу. Вот код: public partial class MainForm : Form { int...

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

5
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
23.10.2013, 12:40
Так попробуйте(самое базовое и медленное):
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]];
}
0
7 / 7 / 2
Регистрация: 16.11.2011
Сообщений: 251
23.10.2013, 13:39  [ТС]
Ваш код реализует рисование точки при перетаскивании,а мне нужно что бы рисовало линию между двумя точками. У меня рисуются точки, нужно только как то их связать
0
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
23.10.2013, 14:00
Поясните, в чем конкретно у вас проблема. Код, который рисует линию между точками, у вас есть:
Objective-C
1
2
3
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
        CGContextStrokePath(UIGraphicsGetCurrentContext());
Что вам еще надо?
0
7 / 7 / 2
Регистрация: 16.11.2011
Сообщений: 251
23.10.2013, 14:11  [ТС]
Но линия не рисуется, рисуется точка. Мне нужно построить фигуру в которой я буду четко понимать ее границы, так как потом, требуется вычислить ее площадь
0
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
23.10.2013, 15:33
Slava-hacker32, ах вы неблагодарный.
Надо вам? Сами и делайте.
Я много написал всего, из чего можно сделать что вам нужно.

Должно быть как то так
создали точку 1,
создали точку 2, между ними вырисовывалась линия,
создали 3 точку, между 2 и 3 - линия и т.д.
Если 2 клика, то первая соединяется с последней (ну это так, в теории).
Мне, что бы с предыдущей соединяло
Точки у меня "создаются", и даже в массив кидаются, и линии между ними рисуются, и даже несколько. И с первой соединить не проблема, там 1 строчку кода добавить...
Цитата Сообщение от Slava-hacker32 Посмотреть сообщение
,а мне нужно что бы рисовало линию между двумя точками.
Вы сами без понятия что вам надо, а еще и объяснить не можете что конкретно "надо".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2013, 15:33
Помогаю со студенческими работами здесь

Рисование линии по точкам
как нарисовать линию по точкам на qbasic. может выдрать алгоритм из библиотеки уже готовой на сайте.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru