2014-02-11 2 views
1

Я пытаюсь нарисовать красный прямоугольник над обнаруженным штрих-кодом, используя новейшие api's iOS 7. Мне удалось потянуть за границы и углы, но я не совсем понимаю, как взять эту информацию и применить ее к моему мнению.Использование штрих-кодов для создания CGRect?

В методе viewDidLoad я определить вид, что я буду использовать для наложения штрих-кода сразу найдено:

//Initialize Laser View 
    laserView = [[UIView alloc] init]; 
    laserView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin; 
    laserView.layer.borderColor = [UIColor redColor].CGColor; 
    laserView.layer.borderWidth = 2; 
    [self.view addSubview:laserView]; 

В didOutputMetadataObjects я готовлю лазерный взгляд & тянуть в пределах штрих-кодов и углов:

//Prepare Laser View's frame 
CGRect laser = CGRectZero; 

laser = barcodeObject.bounds; 
NSLog(@"Bounds: %@", NSStringFromCGRect(barcodeObject.bounds)); 
NSLog(@"Frame: %@", barcodeObject.corners); 

//Update Laser 
laserView.frame = laser; 

В моем последнем счете, за пределы я получил: {{7.0565414, 314.25}, {265.26062, 1.499999}} и углов я получил:

(

    { 
     X = "7.056541"; 
     Y = "314.25"; 
    }, 
     { 
     X = "7.056541"; 
     Y = "315.75"; 
    }, 
     { 
     X = "272.3172"; 
     Y = "315.75"; 
    }, 
     { 
     X = "272.3172"; 
     Y = "314.25"; 
    } 
) 

Я хочу быть в состоянии плотно обернуть cgrect вокруг штрих-кода. Вот пример того, что я пытаюсь сделать:

enter image description here

+0

В чем Ваш вопрос? Оценки являются CGRect. –

+0

Например, в презентации WWDC штрих-код сканируется под углом, а наложение распознает этот перекос и плотно обертывает штрих-код. Приложение redlaser также делает это. Я обновил свой ответ с фото – KingPolygon

+0

Я вижу, в этом случае вы не используете прямоугольник (так как это всегда прямоугольник). Может быть, использовать UIBezierPath или CGPath? –

ответ

1

Вам нужно построить CGPath или UIBezierPath путь, основанный на этих углах, а затем нарисуйте путь.

  • С помощью подхода CGPath создайте путь, используя CGPathCreateMutable. Создайте путь, используя CGPathMoveToPoint, чтобы установить начальную точку, а затем с помощью CGPathAddLineToPoint переместиться оттуда в каждый угол по очереди. Когда вы закончите, вы можете использовать путь с CAShapeLayer. Добавьте этот слой в качестве подслоя в вашем представлении.
  • С UIBezierPath следуйте тому же общему подходу, что и с CGPath. Используйте moveToPoint: для начала и addLineToPoint:, чтобы нарисовать форму. Нарисуйте путь как обычно (обычно в drawRect в представлении).