У меня есть вид коллекции, размер ячейки которого пользователь может изменить. В представлении коллекции есть ячейка шаблона, которая содержит UIImageView
в нижнем правом углу. Этот вид изображения масштабируется пропорционально ячейке просмотра коллекции. В этом представлении изображения я делаю несколько пользовательских чертежей в разное время, используя UIBezierPath
объектов.Кривая UIBezier становится размытой при изменении размера
Если я рисую изображение, и пользователь меняет размер ячейки, изображение пропорционально масштабируется и интерполируется, становясь слегка размытым. Это похоже на то, что изображение кэшируется и повторно используется, но это не то, что я хочу. Я хочу, чтобы каждая ячейка должна была перерисовывать свои кривые в своем представлении изображения, чтобы они были острыми и не размытыми.
Вот пример того, как я рисую в UIImageView
:
//ImageView.m
//Draw a custom image (forgive the magic numbers)
-(void)drawImage{
UIGraphicsBeginImageContext(self.bounds.size);
UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(1, 1, self.bounds.size.width-2, self.bounds.size.height-2)];
[[UIColor whiteColor] setStroke];
[circle setLineWidth:self.bounds.size.width/44.0f];
[[UIColor redColor] setFill];
[circle fill];
[circle stroke];
UIBezierPath *checkmark = [UIBezierPath bezierPath];
float r = self.bounds.size.width/160.0f;
[checkmark moveToPoint:CGPointMake(40.0f*r, 40.0f*r)];
[checkmark addLineToPoint:CGPointMake(120.0f*r,120.0f*r)];
[checkmark moveToPoint:CGPointMake(40.0f*r, 120.0f*r)];
[checkmark addLineToPoint:CGPointMake(120.0f*r, 40.0f*r)];
[checkmark setLineWidth:self.bounds.size.width/22.0f];
[checkmark stroke];
[self setImage:UIGraphicsGetImageFromCurrentImageContext()];
UIGraphicsEndImageContext();
}
Вот как изменить размер ячейки:
//ViewController.m
//The user chooses a cell size from a UISegmentedControl.
-(IBAction)selectedSegmentIndexChanged:(UISegmentedControl *)sender{
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
int i = sender.selectedSegmentIndex;
int p = 2.0f*(4-i);
int s = (320-p*i)/(i+1);
layout.itemSize = CGSizeMake(s,s);
layout.minimumInteritemSpacing = p;
layout.minimumLineSpacing = p;
[self.collectionView setCollectionViewLayout:layout animated:YES];
}