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

Objective-C

Войти
Регистрация
Восстановить пароль
 
LU
1 / 1 / 0
Регистрация: 06.04.2012
Сообщений: 10
#1

Не могу очистить Context - Objective-C

06.04.2012, 16:07. Просмотров 790. Ответов 1
Метки нет (Все метки)

Доброе время суток. Помогите пожалуйста разобраться.
Мне нужно было достать smooth рисовалку, и я взял за основу вот этот код:

SmoothLineView.h

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import <UIKit/UIKit.h>
 
 
 
@interface SmoothLineView : UIView {
    @private
    CGPoint currentPoint;
    CGPoint previousPoint1;
    CGPoint previousPoint2;
    CGFloat lineWidth;
    UIColor *lineColor;
    UIImage *curImage;
}
@property (nonatomic, retain) UIColor *lineColor;
@property (readwrite) CGFloat lineWidth;
 
@end

SmoothLineDraw.m
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#import "SmoothLineView.h"
#import <QuartzCore/QuartzCore.h>
 
#define DEFAULT_COLOR [UIColor blackColor]
#define DEFAULT_WIDTH 5.0f
 
@interface SmoothLineView () 
 
#pragma mark Private Helper function
 
CGPoint midPoint(CGPoint p1, CGPoint p2);
 
@end
 
@implementation SmoothLineView
 
#pragma mark -
 
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor whiteColor];
        self.lineWidth = DEFAULT_WIDTH;
        self.lineColor = DEFAULT_COLOR;
    }
    return self;
}
 
#pragma mark Private Helper function
 
CGPoint midPoint(CGPoint p1, CGPoint p2)
{
    return CGPointMake((p1.x + p2.x) * 0.5, (p1.y + p2.y) * 0.5);
}
 
 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    
    UITouch *touch = [touches anyObject];
    
    previousPoint1 = [touch previousLocationInView:self];
    previousPoint2 = [touch previousLocationInView:self];
    currentPoint = [touch locationInView:self];
    
}
 
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    
    UITouch *touch  = [touches anyObject];
    
    previousPoint2  = previousPoint1;
    previousPoint1  = [touch previousLocationInView:self];
    currentPoint    = [touch locationInView:self];
    
    
    // calculate mid point
    CGPoint mid1    = midPoint(previousPoint1, previousPoint2); 
    CGPoint mid2    = midPoint(currentPoint, previousPoint1);
    
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, mid1.x, mid1.y);
    CGPathAddQuadCurveToPoint(path, NULL, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
    CGRect bounds = CGPathGetBoundingBox(path);
    CGPathRelease(path);
    
    CGRect drawBox = bounds;
    
    //Pad our values so the bounding box respects our line width
    drawBox.origin.x        -= self.lineWidth * 2;
    drawBox.origin.y        -= self.lineWidth * 2;
    drawBox.size.width      += self.lineWidth * 4;
    drawBox.size.height     += self.lineWidth * 4;
    
    UIGraphicsBeginImageContext(drawBox.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    curImage = UIGraphicsGetImageFromCurrentImageContext();
    [curImage retain];
    UIGraphicsEndImageContext();
 
    [self setNeedsDisplayInRect:drawBox];
}
 
- (void)drawRect:(CGRect)rect
{
    [curImage drawAtPoint:CGPointMake(0, 0)]; // зачем эта строка - я так и не понял, удалил её.
    CGPoint mid1 = midPoint(previousPoint1, previousPoint2); 
    CGPoint mid2 = midPoint(currentPoint, previousPoint1);
 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    
    //[[self layer] drawInContext:context];
 
    [self.layer renderInContext:context];
 
    CGContextMoveToPoint(context, mid1.x, mid1.y);
    // Use QuadCurve is the key
    CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y); 
    
    CGContextSetLineCap(context, kCGLineCapRound);
    CGContextSetLineWidth(context, self.lineWidth);
    CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor);
 
    CGContextStrokePath(context);
 
    [super drawRect:rect];
    
    [curImage release];
    
}
 
@synthesize lineColor,lineWidth;
@end


Я пытаюсь приделать метод очистки всего что было нарисованно, но у меня ничего не получается.
Вот что я пытался сделать:
Objective-C
1
2
3
4
5
6
-(void)clear
{
    CGContextRef context = UIGraphicsGetCurrentContext(); //записываем текущий контекст в переменную
    CGContextClearRect(context, self.frame); //очищаем
    NSLog(@"%@",context); // пишет nil
}
В консоли пишет invalid context
Но почему-то ничего не происходит. Надеюсь на помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2012, 16:07     Не могу очистить Context
Посмотрите здесь:

Не могу очистить корзину - Windows 7
Windows 7. Есть *.exe -файл. Еле перемести его в корзину - на del, удаление через контекстное меню, shift+del, перетаскивание в корзину не...

НЕ могу очистить корзину - Windows XP
Удалил программу песочницу потом заметил на диске Ц папку песочницы ее тоже удалил(зачем она если песочницы нет) папка эта не удалялась...

Не могу правильно очистить listview - C#
Здравствуйте. У меня на форме есть ComboBox и один Listview. После того как я что-то выберу в Комбобоксе в листе должна появиться...

Не могу найти ошибку(очистить форму необходимо) - Delphi
Помогите!! Скачал курсовую, программу на delphi, не могу ее подправить. Замучался уже! Сдавать надо( Программа транслятор с паскаля на...

Context add - JavaScript
Hello! I have a site, in which there are a lot of materials for download. Now I want to put this Add script under download button (when a...

Name not unique in this context - C++ Builder БД
Проблема такого характера. На первой форме реализована работа не сложной базы данных в виде ежедневника, при активации этой формы выдается...

Объект Context - Программирование Android
Проблема такая: Я создаю новый класс в отдельном файле для работыSQLite и в нем мне нужен Объект Context, если я наследую Activity ...

Context - ошибка - Программирование Android
Здравствуйте! Программа должна выводить карту из google. Использую Picasso как самое рациональное решение. При импользовании Picasso надо...

Fragment and context - Программирование Android
Есть шерлокбар. Два таба у него. Каждому табу привязан свой фрагмент через tabListener. Хочу чтобы в первом табе...

ConText - поиск - Oracle
Может кто поможет? Как организовать контекстный поиск по полям типа BLOB (CLOB)? В этих полях хранятся документы в разных форматах, да...

Context Spring - Java EE
Всем привет. Вопрос следующего характера. Я использую Spring совместно с JSF ..когда приложение строится, jsf сам грузит контекст...

Illegal datatype context - Haskell
Взял определение типа для комплексного числа из библиотеки http://www.haskell.ru/complex.html data (RealFloat a) =&gt; Complex a = !a...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LU
1 / 1 / 0
Регистрация: 06.04.2012
Сообщений: 10
09.04.2012, 02:04  [ТС]     Не могу очистить Context #2
забыл отписаться, проблему решил, дописал пару условий c этими строками в "drawRect:"
Ответ Создать тему
Опции темы

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