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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Программирование мобильных устройств??? http://www.cyberforum.ru/objective-c/thread539017.html
Может мне кто нибудь объяснить почему Objective-C попал в программирование мобильных устройств? Каким образом язык программирования попадает под "программирование мобильных устройств"?
Objective-C IPhone как сгенерировать ключ каждой скачаной программе Здравствуйте Уважаемые профессионалы. Создаю программу, в которой каждый пользователь должен получать в определенное время сообщения / Исходя из этой задумки, каждый человек установивший у себя программу на IPhone должен как-нибудь записаться в базу данных. И чтобы его как-нибудь распознала программа. у него должен быть уникальный ндентификатор(ключ). Подскажите пожалуйста как можно... http://www.cyberforum.ru/objective-c/thread538626.html
Простейший Web Dav клиент Objective-C
Помогите, сам разобраться с протоколом Web DAV не могу (я начинающий) - дайте зацепиться: нужен работающий код 1. подключиться к Web Dav серверу с логином паролем 2. считать корневой каталог, всмысле список папок в корне. Спасибо!
Как сделать листание под ipad Objective-C
Собственно вопрос - пишу приложение на ipad. Оно из себя представляет интерактивный журнал(простенький). Но вот не знаю как реализовать перелистывание между формами. Пользователь должен листнуть пальцем по форме, и приложение должно просто перейти на другую форму. Заранее благодарен.
Objective-C На каком движке лучше реализовать такую презентацию? http://www.cyberforum.ru/objective-c/thread527331.html
Добрый день! На каком движке лучше реализовать такую презентацию? http://dl.dropbox.com/u/33728748/Cheetalki08sound.mov
Objective-C Interface Builder 4.2 добрый день. итак, я занялся изучением Objective-C не так давно, и столкнулся с некоторой проблемой, а именно: я начал изучение с книги "Become An Xcode", все было понятно, до тех пор, как началось изучение Interface Builder-а. Дело в том, что эта книга написана под версию Xcode 3.0 ( как я понял ), а у меня стоит 4.2. В связи с этим я уйму времени вчера потратил только на то, чтобы... подробнее

Показать сообщение отдельно
LU
1 / 1 / 0
Регистрация: 06.04.2012
Сообщений: 10

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

06.04.2012, 16:07. Просмотров 792. Ответов 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
Но почему-то ничего не происходит. Надеюсь на помощь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru