Удалить рисунок UIBezierPath?

Я работаю над цифровой подписью на UIView. Обычно я создаю его с помощью этого кода, но я не могу удалить путь Безье при нажатии кнопки. Новый BezierPath не создается при нажатии на кнопку. Я делюсь своим кодом, пожалуйста, посмотрите на мой код.

       //Create Class for UIView
        #import "SignView.h"
        {
            UIBezierPath *path;
        }
        - (id)initWithCoder:(NSCoder *)aDecoder
        {
            if (self = [super initWithCoder:aDecoder])
            {
                [self setMultipleTouchEnabled:NO];
                [self setBackgroundColor:[UIColor whiteColor]];
                path = [UIBezierPath bezierPath];
                [path setLineWidth:2.0];
            }
            return self;
        }

        - (void)drawRect:(CGRect)rect 
        {
            [[UIColor blackColor] setStroke];
            [path stroke];
        }
        - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
        {
            UITouch *touch = [touches anyObject];
            CGPoint p = [touch locationInView:self];
            [path moveToPoint:p];
        }
        - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
        {
            UITouch *touch = [touches anyObject];
            CGPoint p = [touch locationInView:self];
            [path addLineToPoint:p];
            [self setNeedsDisplay];
        }
        - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
        {
            [self touchesMoved:touches withEvent:event];
        }
        - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
        {
            [self touchesEnded:touches withEvent:event];
        }
        - (void)erase
        {
            path = nil;
            path = [UIBezierPath bezierPath];
            [path setLineWidth:2.0];
            [self setNeedsDisplay];

        }

        //viewController.m

        - (IBAction)clearSign:(id)sender {
            SignView *clrView = [[SignView alloc]init];
            [clrView erase];
        }

person DEEPAK kumar    schedule 23.11.2016    source источник
comment
вы загружаете вид знака по коду или staorybaord. в вашем действии повторная инициализация представления знака не может очистить знак   -  person Vinodh    schedule 23.11.2016
comment
не обнуляйте объект пути. Используйте функцию removeAllPoints.   -  person Muhammad Zohaib Ehsan    schedule 23.11.2016
comment
@deepak, какой подход решает вашу проблему или стирает изменение кода   -  person Vinodh    schedule 23.11.2016
comment
Подход 1 исправить проблему, но проблема заключается в том, что приложение запускается в первый раз, а не рисует некоторые вещи. не работает. но нажмите кнопку очистки знака, чем рисовать знак. код запуска приложения в первый раз не работает   -  person DEEPAK kumar    schedule 23.11.2016
comment
Круто @DEEPAKkumar счастливое программирование   -  person Vinodh    schedule 23.11.2016


Ответы (1)


Пожалуйста, измените метод стирания на следующий:

- (void)erase
        {
            [path removeAllPoints];
            path = [UIBezierPath bezierPath];
            [path setLineWidth:2.0];
            [self setNeedsDisplay];

        }

Чтобы заставить работать функцию удаления, вы можете использовать следующие приложения:

Подход 1

Если вы загружаете представление знака по коду, используйте следующий код:

//ViewController.m

    #import "SignView.h "

    @interface MySignatureViewController : UIViewController {
         SignView* signView;
    }

    -(void)viewDidLoad{
         signView= [[ mySmoothLineView alloc] initWithFrame: desiredFrame];
         [signView setBackgroundColor:[UIColor clearColor]];
         [self.view addSubview: signView];
    }

     - (IBAction)clearSign:(id)sender {
                [signView erase];
            }

Подход 2

Если вы используете раскадровку

//ViewController.m


        #import "SignView.h "

        @interface MySignatureViewController : UIViewController {
             @property (nonatomic, weak)SignView* signView;
        }



         - (IBAction)clearSign:(id)sender {
                    [self.signView erase];
                }
person Vinodh    schedule 23.11.2016
comment
Подход 1 работает, но добавьте метод signView в метод viewdidLoad для запуска приложения, а не работающий знак. Нажмите кнопку clearSign, чем работает. - person DEEPAK kumar; 23.11.2016