2013-02-26 32 views
6

Próbuję narysować kilka okręgów wewnątrz UIImageView z określonego obrazu. To, co starałem się zrobić:Rysowanie kształtu w UIImageView IOS

UIGraphicsBeginImageContext(self.view.bounds.size); 
CGContextRef contextRef = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(contextRef, 2.0); 
CGContextSetStrokeColorWithColor(contextRef, [color CGColor]); 
CGRect circlePoint = (CGRectMake(coordsFinal.x, coordsFinal.y, 50.0, 50.0)); 

CGContextStrokeEllipseInRect(contextRef, circlePoint); 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

[photoView addSubview:image]; 

Okrąg jest sporządzony w porządku, ale lubię PhotoView działać jako maska ​​do niego. Więc jeśli na przykład przesuję UIImageView z UIView za pomocą animacji, chciałbym, aby kółko poruszało się wraz z nim. Ważne jest to, że współrzędne odnoszą się do całego ekranu.

+0

Brzmi jak niestandardowy UIView lub pochodna niestandardowa UIImageView dla mnie. – trumpetlicks

Odpowiedz

10

Zamiast tego należy użyć warstwy kształtu Core Animation.

CAShapeLayer *circleLayer = [CAShapeLayer layer]; 
// Give the layer the same bounds as your image view 
[circleLayer setBounds:CGRectMake(0.0f, 0.0f, [photoView bounds].size.width, 
               [photoView bounds].size.height)]; 
// Position the circle anywhere you like, but this will center it 
// In the parent layer, which will be your image view's root layer 
[circleLayer setPosition:CGPointMake([photoView bounds].size.width/2.0f, 
            [photoView bounds].size.height/2.0f)]; 
// Create a circle path. 
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect: 
            CGRectMake(0.0f, 0.0f, 50.0f, 50.0f)]; 
// Set the path on the layer 
[circleLayer setPath:[path CGPath]]; 
// Set the stroke color 
[circleLayer setStrokeColor:[[UIColor redColor] CGColor]]; 
// Set the stroke line width 
[circleLayer setLineWidth:2.0f]; 

// Add the sublayer to the image view's layer tree 
[[photoView layer] addSublayer:circleLayer]; 

Teraz, jeśli animować UIImageView, który zawiera tę warstwę, warstwa będzie poruszać się z nim, ponieważ jest to warstwa dziecko. I nie ma teraz potrzeby zastępowania drawRect:.

+0

wydaje się świetny, ale co z CoordsFinal, który ustawia pozycję koła? – user2014474

+0

Jak obliczasz teraz? Użyj tej samej techniki. Powinno być tak samo. Po prostu ustaw właściwość 'position' dla każdej tworzonej warstwy koła/kształtu. –

+0

CoordsFinal jest niezależny od tej metody CGPoint – user2014474

Powiązane problemy