У меня есть интерфейс, который позволяет вам позиционировать изображение в круге, а затем, когда вы решите, что он находится в нужном месте, нажмите кнопку обрезки и обрезайте видимую область образ.Как разместить и обрезать UIImage по кругу
Структурно У меня есть представление, содержащее прокрутку, содержащую UIImageView. Первый слой слоев имеет слой формы в виде маски, которая имеет форму круга. это мой код инициализации.
- (void)viewDidLoad
{
[super viewDidLoad];
_buttonView = [[UIView alloc]initWithFrame:CGRectMake(0, self.view.height - 136, 320, 136)];
[_buttonView setBackgroundColor:[UIColor whiteColor]];
_saveButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_saveButton setTitle:@"Save image" forState:UIControlStateNormal];
[_saveButton setBackgroundImage:[[UIImage imageNamed:@"cntnt-button-defult-dark-grey.png"] resizableImageWithNormalCapInsets] forState:UIControlStateNormal];
[_saveButton addTarget:self action:@selector(saveImageWasPressed:) forControlEvents:UIControlEventTouchUpInside];
[_saveButton setBackgroundImage:[[UIImage imageNamed:@"cntnt-button-pressed-dark-grey.png"] resizableImageWithNormalCapInsets] forState:UIControlStateHighlighted];
[_saveButton setFrame:CGRectMake(10, 11, 300, 50)];
[_buttonView addSubview:_saveButton];
_cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_cancelButton setTitle:@"CANCEL" forState:UIControlStateNormal];
[_cancelButton setBackgroundImage:[[UIImage imageNamed:@"btm-button-defult-grey.png"] resizableImageWithNormalCapInsets] forState:UIControlStateNormal];
[_cancelButton setBackgroundImage:[[UIImage imageNamed:@"btm-button-pressed-grey.png"] resizableImageWithNormalCapInsets] forState:UIControlStateHighlighted];
[_cancelButton setFrame:CGRectMake(10, _saveButton.bottom+7, 300, 50)];
[_buttonView addSubview:_cancelButton];
[self.view addSubview:_buttonView];
_topView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, _buttonView.yOrigin)];
[self.view addSubview:_topView];
_scrollView = [[UIScrollView alloc]initWithFrame:_topView.bounds];
[self.topView addSubview:_scrollView];
[_scrollView setDecelerationRate:0.0];
_imageView = [[UIImageView alloc]initWithFrame:CGRectZero];
[_scrollView addSubview:_imageView];
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(10, (self.topView.height - 300)/2, 300, 300)];
_imageOverlay = [CAShapeLayer layer];
[_imageOverlay setPath:path.CGPath];
[_imageOverlay setFrame:CGRectMake(0, 0, 320, 320)];
[_topView.layer setMask:_imageOverlay];
[_imageView setImage:[UIImage imageNamed:@"portrait.jpg"]];
[_imageView setSize:_imageView.image.size];
[_scrollView setContentOffset:_imageView.center];
[_scrollView setContentSize:_imageView.image.size];
}
Когда «_saveButton» нажата, я хочу, чтобы изображение обрезается, где видимая часть _imageOverlay есть.
Если у вас есть какие-либо вопросы по вышеуказанному вопросу, пожалуйста, не стесняйтесь спрашивать. Не могли бы вы помочь мне?
Я думаю, что я понимаю, но какой вид следует передавать в качестве параметра, какой вид это будет? Имейте в виду структуру, которую я привел выше. Ура! –
renderView в моем коде может быть you_ImageOverlay (я думаю). поэтому _imageOverlay.layer.cornerRadius = что угодно, а затем вызовите мой код. – Eric