【发布时间】:2014-09-09 22:42:01
【问题描述】:
我正在使用 pickerController 的视图和 uinavigationcontrollerdelegate 添加叠加层,如下所示。
-(void)navigationController:(UINavigationController *)navigationController didShowViewController: (UIViewController *)viewController animated:(BOOL)animated{
if ([navigationController.viewControllers count] == 3)
{
CGFloat screenHeight = [[UIScreen mainScreen] bounds].size.height;
UIView *plCropOverlay = [[[viewController.view.subviews objectAtIndex:1]subviews] objectAtIndex:0];
plCropOverlay.hidden = YES;
int position = 0;
if (screenHeight == 568)
{
position = 124;
}
else
{
position = 80;
}
CAShapeLayer *circleLayer = [CAShapeLayer layer];
UIBezierPath *path2 = [UIBezierPath bezierPathWithOvalInRect:
CGRectMake(0.0f, position, 320.0f, 320.0f)];
[path2 setUsesEvenOddFillRule:YES];
[circleLayer setPath:[path2 CGPath]];
[circleLayer setFillColor:[[UIColor clearColor] CGColor]];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 320, screenHeight-72) cornerRadius:0];
[path appendPath:path2];
[path setUsesEvenOddFillRule:YES];
CAShapeLayer *fillLayer = [CAShapeLayer layer];
fillLayer.path = path.CGPath;
fillLayer.fillRule = kCAFillRuleEvenOdd;
fillLayer.fillColor = [UIColor blackColor].CGColor;
fillLayer.opacity = 0.8;
[viewController.view.layer addSublayer:fillLayer];
}
}
当添加上面定义的叠加层时,我倾向于得到这个视图:
我可以使用定义的 CGRect 将图像精确地裁剪为正方形。
CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
如果存在圆形叠加层且 imagePickers 编辑属性为 YES,如何解决此问题?我可以放大和缩小图片。我如何在这里使用 BezierPath?
【问题讨论】:
-
目标到底是什么?您不能以圆形图像结束,所以您只想将覆盖层下的图像擦除为白色?缩放与叠加层有何关系?您已经可以自己处理缩放了吗?
-
UIImage 位于缩放比例为 2.0 的滚动视图之上。当图像被缩放并预计被裁剪时,该覆盖清晰视图内的缩放图像应该被裁剪掉。
-
是的,要正确缩放非常非常困难。我已经在下面给了你你需要的所有代码!
-
你好@DesperateLearner 还有什么问题吗?!运气好吗?
标签: ios uiimagepickercontroller uibezierpath