2016-01-27 2 views
0

Есть ли способ изменить форму чертежа UIBezierPath, см. Изображение ниже, это как линия, когда пользователь тащит палец, но я хочу, чтобы звезда, круг и другие были каким-то образом для этого.Как изменить форму линии UIBezierPath Drawing?

enter image description here

Мой Expectation является enter image description here

Это мой UIBezierPath код:

-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
    { 
     UITouch *touch = [[event allTouches] anyObject]; 
     touchPoint = [touch locationInView:self]; 

     if (!CGPointEqualToPoint(startingPoint, CGPointZero)) 
     { 
      UIBezierPath *path = [UIBezierPath bezierPath]; 
      [path moveToPoint:CGPointMake(touchPoint.x,touchPoint.y)]; 
      [path addLineToPoint:CGPointMake(startingPoint.x,startingPoint.y)]; 

      CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
      shapeLayer.path = [path CGPath]; 
      shapeLayer.strokeColor = [single.arrColor[single.i] CGColor]; 
      if([UIDevice currentDevice].userInterfaceIdiom ==UIUserInterfaceIdiomPad) 
      { 
       shapeLayer.lineWidth = 7.0; 

      } 
      else 
      { 
       shapeLayer.lineWidth = 5.0; 

      } 
      shapeLayer.fillColor = [[UIColor redColor] CGColor]; 
      [self.layer addSublayer:shapeLayer]; 
      [clearBeizer addObject:shapeLayer]; 
     } 
     startingPoint=touchPoint; 
     // [arrLayer addObject:shapeLayer]; 
     NSLog(@"Touch moving point =x : %f Touch moving point =y : %f", touchPoint.x, touchPoint.y); 
    } 
+0

http://stackoverflow.com/questions/22880587 см. Это. –

+0

ОК я увижу, что bro @HarvantS. –

+0

@ HarvantS. Я отредактировал свой вопрос, пожалуйста, проверьте его, только мне нужно изменить структуру, я новичок в рисовании приложения. Мне нужно больше ссылок, если возможно, скажите, что я сделаю. –

ответ

0

Я просто сделать это с помощью UIImageView:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:single.arrimages[single.colorimages]]]; 
       imageView.frame = CGRectMake(touchPoint.x, touchPoint.y, 30,30); 
       [self addSubview:imageView]; 

просто добавить изображение во время пользователя коснитесь экрана.

Получите координаты пользователя x, y и отдайте его на раму uiimageview.

i Надеюсь, это поможет кому-то.

1

Да, это выполнимо, но это не так просто. То, что вы в основном хотите, - это погладить путь со звездами вместо обычных тире. Насколько я знаю, iOS предоставляет API только для стандартных методов, то есть поглаживания с прямоугольным тире.

Если вы хотите реализовать пользовательский поглаживание, вы должны сделать это сами. Вероятно, вам придется сначала сгладить путь безье. Затем «пройдите» по пути и рисуйте звезды/круг/белки с определенным интервалом вручную. Это особенно сложно, если вам нужен промежуток между звездами, чтобы быть равным.

Вы можете ознакомиться с библиотекой DrawKit для MacOS. DrawKit предназначен для MacOS, а не для iOS! Это просто ссылка для вас, чтобы получить эту идею.

DrawKit имеет NSBezierPath+Geometry.h Категория на NSBezierPath класс. Вы можете начать с (NSBezierPath*)bezierPathWithZig:(CGFloat)zig zag:(CGFloat)zag метод и посмотреть, как зиг-Zagy путь реализуется

https://github.com/DrawKit/DrawKit/.../NSBezierPath-Geometry.m#L1206

или волнообразный путь [(NSBezierPath*)bezierPathWithWavelength:amplitude:spread:]

https://github.com/DrawKit/DrawKit/..../NSBezierPath-Geometry.m#L1270

Просто FYI: UIBezierPath (IOS) методы часто не хватает, которые доступны в NSBezierPath (MacOS)

Если DrawKit вас смущает, есть, вероятно, библиотеки с открытым исходным кодом для iOS в Интернете, попробуйте s заставляя их видеть, как выполняется пользовательский чертеж.

+0

, так что нет в опции сборки @euvs правильно, нам нужно создать для него индивидуальный дизайн. –

+0

Я прав ......? –

+0

@ KishoreKumar Я так считаю ... или найти библиотеку. – euvs

1

Да Вы можете это сделать. Но для этой задачи вам нужно получить значки в форме.

Вы можете попробовать это отличный ответ предоставленного RobMayoff here: и git repo

Вот еще один способ сделать это:

Я сделал простые для редактирования изображений App похожи на что делает.

enter image description here

Вы можете рисовать фигуры сердца на изображении:

enter image description here

Как это, вы можете сделать много пользовательских форм:

enter image description here

Код довольно прямолинейный и простой:

Вам нужно создать несколько пользовательских форменных ластиков. Я называю их ластиком, потому что они просто стирают рис: P.

Вот методы настройки ластика:

- (void)newMaskWithColor:(UIColor *)color eraseSpeed:(CGFloat)speed { 
    wipingInProgress = NO; 
    eraseSpeed = speed; //how fast eraser should move 
    maskColor = color; //eraser color 
    [self setNeedsDisplay]; 
} 
-(void)setErase:(UIImage *)img{ 
eraser =img; //set the custom shaped image here 
} 

И нарисовать образный резинку пользовательский на взгляд:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
     wipingInProgress = YES; 
    } 
    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
     if ([touches count] == 1) { 
      UITouch *touch = [touches anyObject]; 
      location = [touch locationInView:self]; 
      location.x -= [eraser size].width/2; 
      location.y -= [eraser size].width/2; 
      [self setNeedsDisplay]; 
     } 
    } 

и, наконец, метод рисования прямоугольника:

- (void)drawRect:(CGRect)rect { 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    if (wipingInProgress) { 
     if (imageRef) { 
      // Restore the screen that was previously saved 
      CGContextTranslateCTM(context, 0, rect.size.height); 
      CGContextScaleCTM(context, 1.0, -1.0); 

      CGContextDrawImage(context, rect, imageRef); 
      CGImageRelease(imageRef); 

      CGContextTranslateCTM(context, 0, rect.size.height); 
      CGContextScaleCTM(context, 1.0, -1.0); 
     } 

     [eraser drawAtPoint:location blendMode:kCGBlendModeDestinationOut alpha:eraseSpeed]; 
    } 
    // Save the screen to restore next time around 
    imageRef = CGBitmapContextCreateImage(context); 

} 

Вот некоторые переменные, объявленные в файле .h:

CGPoint  location; 
CGImageRef imageRef; 
UIImage  *eraser; 
BOOL  wipingInProgress; 
UIColor  *maskColor; 
CGFloat  eraseSpeed; 
+0

Mr.T, где я должен давать эти методы в пользовательском классе uiimage или пользовательском классе uiview –

 Смежные вопросы

  • Нет связанных вопросов^_^