Tôi đang cố gắng để thích nghi với một ví dụ cung cấp bởi Apple để lập trình vẽ ngôi sao trong dòng, mã này là như sau:Làm thế nào để vẽ sao bằng Quartz Core?
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, aSize);
for (NSUInteger i=0; i<stars; i++)
{
CGContextSetFillColorWithColor(context, aColor);
CGContextSetStrokeColorWithColor(context, aColor);
float w = item.size.width;
double r = w/2;
double theta = 2 * M_PI * (2.0/5.0); // 144 degrees
CGContextMoveToPoint(context, 0, r);
for (NSUInteger k=1; k<5; k++)
{
float x = r * sin(k * theta);
float y = r * cos(k * theta);
CGContextAddLineToPoint(context, x, y);
}
CGContextClosePath(context);
CGContextFillPath(context);
}
Đoạn mã trên vẽ một ngôi sao hoàn hảo, nhưng là 1. hiển thị đã lộn ngược 2. là màu đen và không có viền. Những gì tôi muốn đạt được là vẽ nhiều ngôi sao trên cùng một dòng và với phong cách nhất định. Tôi hiểu rằng tôi thực sự vẽ cùng một con đường 5 lần trong cùng một vị trí và rằng tôi đã bằng cách nào đó để lật ngữ cảnh theo chiều dọc, nhưng sau một vài bài kiểm tra tôi đã từ bỏ! (Tôi thiếu các kỹ năng toán học và hình học cần thiết: P) ... bạn có thể giúp tôi được không?
UPDATE:
Ok, nhờ CocoaFu, đây là tiện ích rút thăm refactored và làm việc của tôi:
- (void)drawStars:(NSUInteger)count inContext:(CGContextRef)context;
{
// constants
const float w = self.itemSize.width;
const float r = w/2;
const double theta = 2 * M_PI * (2.0/5.0);
const float flip = -1.0f; // flip vertically (default star representation)
// drawing center for the star
float xCenter = r;
for (NSUInteger i=0; i<count; i++)
{
// get star style based on the index
CGContextSetFillColorWithColor(context, [self fillColorForItemAtIndex:i]);
CGContextSetStrokeColorWithColor(context, [self strokeColorForItemAtIndex:i]);
// update position
CGContextMoveToPoint(context, xCenter, r * flip + r);
// draw the necessary star lines
for (NSUInteger k=1; k<5; k++)
{
float x = r * sin(k * theta);
float y = r * cos(k * theta);
CGContextAddLineToPoint(context, x + xCenter, y * flip + r);
}
// update horizontal center for the next star
xCenter += w + self.itemMargin;
// draw current star
CGContextClosePath(context);
CGContextFillPath(context);
CGContextStrokePath(context);
}
}
Ý anh là gì lộn ngược? Một ngôi sao không có 'đáy' như vậy, tôi có sai không? Có lẽ bạn có thể đăng một vài ảnh chụp màn hình, về những gì bạn đang nhận được và những gì bạn đang mong đợi. –
Một ngôi sao thường có một điểm ở đầu một 2 ở phía dưới. Ngôi sao bình thường: http://www.allstarbaseballcamp.com/star_clipart.gif, sao lộn ngược (dọc) sao: http://sunandshield.files.wordpress.com/2010/03/eastern-star.jpg – daveoncode
Xem https: //calayer.com/core-animation/2016/05/22/cashapelayer-in-depth.html#path – iwasrobbed