Yuvarlatılmış bir dikdörtgen için anahat çizmem gerekiyor. Hatları ve yayları yapabileceğimi biliyorum, ama belki de yuvarlak rektler için bir işlev var mı? Buna öncedenpaketlenmiş yoluÇekirdek Grafik/Kuvars 2D'de yuvarlatılmış dikdörtgen nasıl çizilir?
cevap
yoktur, buradan buraya Bunu yapmak için kod gösteren bir referans Quartz Demo ve quartzdemo proje Bunu yapabilmek için, elma içinde yaylar birleştirmek gerekir kod onlar
// As a bonus, we'll combine arcs to create a round rectangle!
// Drawing with a white stroke color
CGContextRef context=UIGraphicsGetCurrentContext()
CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
// If you were making this as a routine, you would probably accept a rectangle
// that defines its bounds, and a radius reflecting the "rounded-ness" of the rectangle.
CGRect rrect = CGRectMake(210.0, 90.0, 60.0, 60.0);
CGFloat radius = 10.0;
// NOTE: At this point you may want to verify that your radius is no more than half
// the width and height of your rectangle, as this technique degenerates for those cases.
// In order to draw a rounded rectangle, we will take advantage of the fact that
// CGContextAddArcToPoint will draw straight lines past the start and end of the arc
// in order to create the path from the current position and the destination position.
// In order to create the 4 arcs correctly, we need to know the min, mid and max positions
// on the x and y lengths of the given rectangle.
CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect), maxx = CGRectGetMaxX(rrect);
CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect), maxy = CGRectGetMaxY(rrect);
// Next, we will go around the rectangle in the order given by the figure below.
// minx midx maxx
// miny 2 3 4
// midy 1 9 5
// maxy 8 7 6
// Which gives us a coincident start and end point, which is incidental to this technique, but still doesn't
// form a closed path, so we still need to close the path to connect the ends correctly.
// Thus we start by moving to point 1, then adding arcs through each pair of points that follows.
// You could use a similar tecgnique to create any shape with rounded corners.
// Start at 1
CGContextMoveToPoint(context, minx, midy);
// Add an arc through 2 to 3
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
// Add an arc through 4 to 5
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
// Add an arc through 6 to 7
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
// Add an arc through 8 to 9
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
// Close the path
CGContextClosePath(context);
// Fill & stroke the path
CGContextDrawPath(context, kCGPathFillStroke);
merak edilirse : //stackoverflow.com/a/18992153/1338292) oldukça iyi bir açıklama. –
İsterseniz, herhangi bir UIView (veya alt sınıf) üzerinde yuvarlatılmış köşelere sahip olmanın kolay yolu, cornerRadius özelliğini görünüm katmanında ayarlamaktır. Eğer
[UIBezierPath bezierPathWithRoundedRect:cornerRadius:]
veya
[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]
kullanabilirsiniz yerine çizgi ve yay üzerinden kendi yolunu yapma
Preview rounded image in iphone
Bu, en kolayı. view.layer.cornerRadius = 10.0f. Quartz çerçevesini içe aktardığınızdan emin olun. Satır genişliği sadece bir piksel bile okşayarak zaman –
Bkz
(ikinci bir sen köşeleri yuvarlatılmış belirtmek sağlar)iOS 3.2 veya daha üstü sürümü mevcuttur.
düzgün dikdörtgen gömme unutmayın: 'CGRectInset (yönüne bağlı çizgi kalınlığı, çizgi kalınlığı)' Sadece şeyiyle – pottedmeat
, bu bununla ne göstermek için de yararlı olacaktır: ' 'objc [[UIColor lightGrayColor] setFill]; // grubu yuvarlak Rect en BG renk UIBezierPath * roundedRect = [UIBezierPath bezierPathWithRoundedRect: _yourDrawingFrame CornerRadius: 4]; [roundedRect fillWithBlendMode: kCGBlendModeNormal alpha: 1.0f]; '' ' – horseshoe7
Aslında okşayarak inme işleminin yalnızca satırın yarısı kadar olması gerektiğine inanıyorum, yani CGRectInset (rect, lineWidth/2.0, lineWidth/2.0)'. Daha CoreGraphics içine yapmanız da 'CGPathAddRoundedRect' kullanabilirsiniz – Taum
Burada yazdığım bir işlev, giriş köşesini bir köşe yarıçapı kullanarak yuvarlar.
CGMutablePathRef createRoundedCornerPath(CGRect rect, CGFloat cornerRadius) {
// create a mutable path
CGMutablePathRef path = CGPathCreateMutable();
// get the 4 corners of the rect
CGPoint topLeft = CGPointMake(rect.origin.x, rect.origin.y);
CGPoint topRight = CGPointMake(rect.origin.x + rect.size.width, rect.origin.y);
CGPoint bottomRight = CGPointMake(rect.origin.x + rect.size.width, rect.origin.y + rect.size.height);
CGPoint bottomLeft = CGPointMake(rect.origin.x, rect.origin.y + rect.size.height);
// move to top left
CGPathMoveToPoint(path, NULL, topLeft.x + cornerRadius, topLeft.y);
// add top line
CGPathAddLineToPoint(path, NULL, topRight.x - cornerRadius, topRight.y);
// add top right curve
CGPathAddQuadCurveToPoint(path, NULL, topRight.x, topRight.y, topRight.x, topRight.y + cornerRadius);
// add right line
CGPathAddLineToPoint(path, NULL, bottomRight.x, bottomRight.y - cornerRadius);
// add bottom right curve
CGPathAddQuadCurveToPoint(path, NULL, bottomRight.x, bottomRight.y, bottomRight.x - cornerRadius, bottomRight.y);
// add bottom line
CGPathAddLineToPoint(path, NULL, bottomLeft.x + cornerRadius, bottomLeft.y);
// add bottom left curve
CGPathAddQuadCurveToPoint(path, NULL, bottomLeft.x, bottomLeft.y, bottomLeft.x, bottomLeft.y - cornerRadius);
// add left line
CGPathAddLineToPoint(path, NULL, topLeft.x, topLeft.y + cornerRadius);
// add top left curve
CGPathAddQuadCurveToPoint(path, NULL, topLeft.x, topLeft.y, topLeft.x + cornerRadius, topLeft.y);
// return the path
return path;
}
nasıl UIView alt sınıf varsayarak işlevini kullanın ve geçersiz kılmak için drawRect:
- (void)drawRect:(CGRect)rect {
// constants
const CGFloat outlineStrokeWidth = 20.0f;
const CGFloat outlineCornerRadius = 15.0f;
const CGColorRef whiteColor = [[UIColor whiteColor] CGColor];
const CGColorRef redColor = [[UIColor redColor] CGColor];
// get the context
CGContextRef context = UIGraphicsGetCurrentContext();
// set the background color to white
CGContextSetFillColorWithColor(context, whiteColor);
CGContextFillRect(context, rect);
// inset the rect because half of the stroke applied to this path will be on the outside
CGRect insetRect = CGRectInset(rect, outlineStrokeWidth/2.0f, outlineStrokeWidth/2.0f);
// get our rounded rect as a path
CGMutablePathRef path = createRoundedCornerPath(insetRect, outlineCornerRadius);
// add the path to the context
CGContextAddPath(context, path);
// set the stroke params
CGContextSetStrokeColorWithColor(context, redColor);
CGContextSetLineWidth(context, outlineStrokeWidth);
// draw the path
CGContextDrawPath(context, kCGPathStroke);
// release the path
CGPathRelease(path);
}
Örnek çıkışı:
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:bubbleBounds cornerRadius:15.0];
CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor);
[bezierPath stroke];
CGPathCreateWithRoundedRect()
istediğini yapacağız. Mevcut
CGPathRef CGPathCreateWithRoundedRect(
CGRect rect,
CGFloat cornerWidth,
CGFloat cornerHeight,
const CGAffineTransform *transform
);
gibi düşünmeyi çok daha kolay hale getirir. Eminim ki bu yeni iOS7 yuvarlatılmış köşeleri SİZE VERMEMEKTEDİR. Yeni iOS7 yuvarlatılmış köşeler için bezierPathWithRoundedRect kullanın ... – Fattie
@JoeBlow Bununla neyi kastettiğinizden emin değilseniz, bu işlev yalnızca iOS7'de eklenmiştir ve yuvarlatılmış köşeler verir; başka bir yuvarlak köşeler var mı? –
http://www.mani.de/backstage/?p=483 – Fattie
... Üç iOS 7.0 ve daha? yıllar geç ama bu günlerde bunları sorunsuz kullanıyorum.
@import CoreGraphics;
@interface YourViewController()
@property (weak, nonatomic) IBOutlet UIButton *theButton;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
self.theButton.layer.cornerRadius = 5.0f;
self.theButton.layer.masksToBounds = YES;
// Another useful ones
// Scaling the view (width, height)
self.theButton.transform = CGAfflineTransformMakeScale(1.50f, 1.50f);
// Setting an alpha value (transparency) - nice with Activity Indicator subviews
self.theButton.alpha = 0.8f;
}
Swift: herkes, nasıl `CGContextAddArcToPoint()` eserler [bu] (http
let rect: CGRect = ...
let path = UIBezierPath(roundedRect: rect, cornerRadius: 5.0)
CGContextAddPath(context, path.CGPath)
CGContextSetStrokeColorWithColor(context, UIColor.clearColor().CGColor)
CGContextDrawPath(context, CGPathDrawingMode.FillStroke)
- 1. Nasıl yuvarlatılmış bir dikdörtgen çizmek için C#
- 2. OpenGL ES'de nasıl renkli bir dikdörtgen çizilir?
- 3. HTML Tuvalinde yuvarlak bir Dikdörtgen nasıl çizilir?
- 4. (iOS) Yuvarlatılmış dikdörtgen, shapeLayer ile nasıl animasyon yapılır?
- 5. Resimdeki dikdörtgen çizimi - dikdörtgen alanın nasıl sınırlandırılacağı?
- 6. android görünümünde yol nasıl çizilir
- 7. Yuvarlatılmış düğmeler
- 8. Nasıl, dikdörtgen div CSS
- 9. kamera açıkken ızgara çizgileri nasıl çizilir avcapturemanager
- 10. Çekirdek Grafikler yuvarlak köşe keskin değil
- 11. Silverlight'ta Üst (veya Alt) Yuvarlak Dikdörtgen Köşeleri Nasıl Yapılır?
- 12. Yuvarlatılmış Köşeler ile Android ImageView Çalışmıyor
- 13. ZendendTitBlock nasıl çizilir PDF
- 14. JMS kuyruğu nasıl çizilir?
- 15. Resimde metin nasıl çizilir?
- 16. Bir TextView nasıl çizilir?
- 17. Swt resmi nasıl çizilir?
- 18. Şekil nasıl çizilir
- 19. plot çizelgesi nasıl çizilir
- 20. Eşmerkezli altıgenler nasıl çizilir?
- 21. Yuvarlatılmış köşelerle kare çizme
- 22. Tuvale dayalı Angular2 bileşeni: İçerisinde nasıl çizilir?
- 23. Dikdörtgen çarpışma
- 24. Yuvarlatılmış prototip köşeleri iOS9.2
- 25. Yuvarlatılmış köşeli FrameLayout
- 26. yuvarlatılmış köşeler FragmentDialog içinde
- 27. Dikdörtgen veya metni nasıl açabilirim?
- 28. Dikdörtgen form
- 29. Swift'de 3B nesneyi çekirdek grafiklerle nasıl çizebilirsiniz?
- 30. Yuvarlatılmış köşeler ve saydamlıklı kenarlık
örnek kod http://stackoverflow.com/a/19142851/294884 – Fattie