Как стереть изображение с помощью касания - PullRequest
2 голосов
/ 29 июня 2011

Прямо сейчас я могу рисовать с помощью прикосновений, используя touchesMoved.

  • Я могу изменить толщину чертежа, присвоив CGContextSetLineWidth значение с плавающей точкой, которое я присвоил значению ползунка.

  • Я могу изменить цвета рисунка.Я делаю это, присваивая CGContextSetStrokeColor в пустом месте touchesMoved 4 различных числа с плавающей точкой.Я присваиваю поплавкам разные значения в соответствии с желаемым цветом.В моем viewDidLoad значения с плавающей точкой от 1 до 4 соответственно равны 1,0, 0,0, 0,0 и 1,0.Это создает красный цвет.Используя IBActions, я присваиваю различные значения для поплавков в соответствии со значением цвета (RGB, а затем альфа-канал). Поэтому, нажав зеленую кнопку, я могу изменить значения поплавков на 0,0, 1,0, 0,0, 1,0.Это создает зеленый цвет.Хорошо!

  • Итак, теперь я хочу создать кнопку ластика.Я проверил справочную веб-страницу класса UIColor и посмотрел на значения чистого цвета, но они не могли стереть то, что я сделал, что я мог понять.Чистый цвет не стирается, он просто рисует четкий рисунок.Теперь я знаю, что мне нужно создать CGPoint и назначить его для locationInView касания, а затем сказать, что если в этом месте есть рисунок, то рисунок должен быть удален.Я не знаю, правильная ли это концепция, но мне она кажется правильной.Если это не правильно, пожалуйста, скажите мне.

Я предоставлю необходимый код, но я также прошу кого-то поделиться своими знаниями и кодом, потому что это действительно застряло у меня!Честно говоря, я не из тех дешевых людей, которые ищут код, а затем выполняют команду -c, а затем команду -v в XCode.Разъяснения всегда приветствуются и приносят пользу моему обучению, поскольку это все еще то, чем я занимаюсь в возрасте 12 лет!

Вот весь мой код, связанный с вопросом:

.h:

#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
@interface GameScreen : UIViewController  {

   BOOL mouseSwiped;
   float lineWidth;
   CGPoint lastPoint;
   IBOutlet UIImageView *drawImage;





   CGFloat f1;
   CGFloat f2;
   CGFloat f3;
   CGFloat f4;



}


-(IBAction)cyan;
-(IBAction)blue;
-(void)checktouch;
-(IBAction)eraser;
-(void)checkgreen;
-(IBAction)orange;
-(IBAction)purple;
-(IBAction)pink;
-(IBAction)black;
-(void)mouseswiped;
-(IBAction)clear;
-(IBAction)dismiss;
-(IBAction)green;
-(IBAction)yellow;
-(IBAction)brown;
-(IBAction)grey;
-(IBAction)white;
-(IBAction)newdp;
-(IBAction)menu;
-(void)remove;
-(IBAction)red;

@end

.m:

#import "GameScreen.h"
#import "DoodlePicsViewController.h"
#import "Settings.h"

@implementation GameScreen



- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {



   mouseSwiped = NO;
   UITouch *touch = [touches anyObject];
   lineWidth = thickness.value;

   lastPoint = [touch locationInView:self.view];
   lastPoint.y -= 20;

}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
   mouseSwiped = YES;

   UITouch *touch = [touches anyObject]; 
   CGPoint currentPoint = [touch locationInView:self.view];
   currentPoint.y -= 20;


   UIGraphicsBeginImageContext(self.view.frame.size);
   [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

   CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
   CGContextSetLineWidth(UIGraphicsGetCurrentContext(), lineWidth);
   CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(),f1, f2, f3, f4);
   CGContextBeginPath(UIGraphicsGetCurrentContext());
   CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
   CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
   CGContextStrokePath(UIGraphicsGetCurrentContext());
   drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();


   lastPoint = currentPoint;
}









-(IBAction)yellow {

   f1 = 1.0;
   f2 = 1.0;
   f3 = 0.0;
   f4 = 1.0;

}
-(IBAction)brown {

   f1 = 0.6;
   f2 = 0.4;
   f3 = 0.2;
   f4 = 1.0;

}
-(IBAction)white {

   f1 = 1.0;
   f2 = 1.0;
   f3 = 1.0;
   f4 = 1.0;

}
-(IBAction)grey {

   f1 = 0.5;
   f2 = 0.5;
   f3 = 0.5;
   f4 = 1.0;

}
-(IBAction)red {

   f1 = 1.0;
   f2 = 0.0;
   f3 = 0.0;
   f4 = 1.0;

}

-(IBAction)cyan {


   f1 = 0.0;
   f2 = 1.0;
   f3 = 1.0;
   f4 = 1.0;
}

-(IBAction)blue {


   f1 = 0.0;
   f2 = 0.0;
   f3 = 1.0;
   f4 = 1.0;
}
-(IBAction)black {


   f1 = 0.0;
   f2 = 0.0;
   f3 = 0.0;
   f4 = 1.0;
}
-(IBAction)green {

   f1 = 0.0;
   f2 = 1.0;
   f3 = 0.0;
   f4 = 1.0;

}

-(IBAction)orange {


   f1 = 1.0;
   f2 = 0.5;
   f3 = 0.0;
   f4 = 1.0;
}
-(IBAction)pink {


   f1 = 1.0;
   f2 = 0.0;
   f3 = 1.0;
   f4 = 1.0;
}
-(IBAction)purple {

   f1 = 0.5;
   f2 = 0.0;
   f3 = 0.5;
   f4 = 1.0;

}




-(IBAction)eraser {

//I'm stuck right here LOL!

}



- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

   UITouch *touch = [touches anyObject];
   if(!mouseSwiped) {
       UIGraphicsBeginImageContext(self.view.frame.size);
       [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
       CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
       CGContextSetLineWidth(UIGraphicsGetCurrentContext(), lineWidth);
       CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), f1, f2, f3, f4);
       CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
       CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
       CGContextStrokePath(UIGraphicsGetCurrentContext());
       CGContextFlush(UIGraphicsGetCurrentContext());
       drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
       UIGraphicsEndImageContext();
   }}
-(void)viewDidLoad {


   f1 = 1.0;
   f2 = 0.0;
   f3 = 0.0;
   f4 = 1.0;




}
@end

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

Как вы правильно заметили, рисование чистым цветом не оказывает никакого эффекта при рисовании в режиме смешивания по умолчанию.Однако, когда вы устанавливаете режим смешивания вашего графического контекста на «копирование», все, что вы рисуете, будет заменять то, что находится под ним, вместо того, чтобы рисовать поверх него.Рисование чистым цветом будет иметь эффект ластика.

CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy);
0 голосов
/ 29 января 2012

Я поместил два изображения поверх друг друга, и я загружаю фон в одном, а рисую в другом, я устанавливаю фон с непрозрачностью 0% в окне рисованного изображения, я могу просто сделать:

-(IBAction) eraseLine {

drawImage.image = nil;

}

, который удаляет все строки без удаления изображения, которое у меня есть в фоновом режиме.

0 голосов
/ 30 июня 2011

Вы можете попробовать сделать ластик обычным прикосновением и установить цвет на любой цвет фона, который вы используете. Поэтому, когда они раскрашивают, это будет выглядеть как стирание, но на самом деле это просто раскраска тем же цветом, что и фон. Кажется, у вас уже есть код, поэтому я не думаю, что мне нужно его публиковать. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...