Я пытаюсь создать в своем приложении эффект «узорчатого мазка кистью». Я добиваюсь этого, используя CGContextStrokePath
с узором UIColor
. Это дает мне проблему ниже.
Когда я рисую прямую линию, она работает фантастически, например:
Но когда я рисую диагональный штрих, я получаю следующее:
В то время как я на самом деле к этому стремлюсь:
(Проблема здесь в разнице в ориентации узора, а не в моей некачественной обрезке изображения!)
То, что я пытался сделать до сих пор, - это искать способ контролировать ориентацию, в которой узор выложен / отображается, но мне не удалось выяснить способ сделать это. Может ли кто-нибудь просветить меня или сказать, как мне это делать?
Текущий код включен для полноты ниже.
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
// get the current context
CGContextRef context = UIGraphicsGetCurrentContext();
//Create a pattern
NSString* theFilePath = [[NSBundle mainBundle] pathForResource: @"iceliteTrial.png" ofType: nil];
UIImage* theGrassPatternImage = [UIImage imageWithContentsOfFile: theFilePath];
UIColor* iceLitePattern = [UIColor colorWithPatternImage: theGrassPatternImage];
CGSize phase = CGSizeMake(self.lineStart.x, self.lineStart.y-30);
CGContextSetPatternPhase(context,phase);
// set the stroke color and width
CGContextSetStrokeColorWithColor(context, iceLitePattern.CGColor);
CGContextSetLineWidth(context, 60.0);
// move to your first point
CGContextMoveToPoint(context, self.lineStart.x, self.lineStart.y);
// add a line to your second point
CGContextAddLineToPoint(context, self.lineEnd.x, self.lineEnd.y);
// tell the context to draw the stroked line
CGContextStrokePath(context);
}
[UIImage imageWithContentsOfFile: theFilePath];
каждый раз, когда вызывается draw rect. Это отрицательно скажется на производительности. Вы должны загрузить его один раз при загрузке представления и сохранить его в переменной экземпляра. - person 67cherries   schedule 05.02.2014