Tag: calayer

UIImage在后台任务中添加到CALayer时不显示

在我的视图控制器中我有: @IBOutlet var worldmapview: Worldmapview! var eventLayer:CALayer=CALayer(); 和一些function: func create_picture_layer(pathtopic:String) -> CALayer { let bm=getImage(pathtopic,fBitmapsizeSelected: 100)!; var calayer_for_picture=CALayer(); calayer_for_picture.frame=CGRectMake(100, 100, 100, 100); calayer_for_picture.contents = bm.CGImage; return calayer_for_picture; } func createCircleShape(x:CGFloat,y:CGFloat, size:CGFloat) -> CAShapeLayer { var test2:UIBezierPath=UIBezierPath(ovalInRect: CGRectMake(x – size/2, y – size/2, size, size)); var shapelayer:CAShapeLayer=CAShapeLayer(); shapelayer.backgroundColor=UIColor.clearColor().CGColor; //shapelayer.frame=CGRectMake(0, 0, 300, 300); shapelayer.fillColor=UIColor.darkGrayColor().CGColor; shapelayer.path=test2.CGPath; shapelayer.opaque=true return […]

UITableViewCell中的CALayer阴影绘制不正确

我使用CALayer将阴影应用于UITableViewCell。 这是我的代码: – (void)addShadowToView:(UIView *)view { // shadow view.layer.shadowColor = [[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor]; view.layer.shadowOpacity = 1.0f; view.layer.shadowOffset = CGSizeMake(0.0f, 3.0f); view.layer.shadowRadius = 6.0f; CGRect shadowFrame = view.layer.bounds; CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath; view.layer.shadowPath = shadowPath; } 问题是,对于一些tableviewcells,阴影不会跨越单元格的整个宽度。 对于一些细胞来说,这是正确的,对于其他细胞来说是错误的。 我注意到设备的旋转也会影响它,重新加载tableview数据有时可以解决这个问题。 什么是最好的方法来缓解这个问题(并且我并不是说要重新加载整个tableview每轮等)? 正确应用阴影的单元格底部示例: 向下滚动之后,在同一个tableview中的单元格底部(阴影只应用于宽度的前75%): 编辑:我注意到这个问题是由这些代码行引起的: CGRect shadowFrame = view.layer.bounds; CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath; view.layer.shadowPath = […]

CATransform3DROTATE与m34参数需要知道angular度以适应特定的高度

我有以下转换代码: //preparing transform CATransform3D basicTrans = CATransform3DIdentity; basicTrans.m34 =1.0/-projection; //calculating angle double angle= [[self angleValueForBlockHeight:height] doubleValue]; double rangle; if (up) { rangle=angle/360*(2.0*M_PI); } else { rangle=(360.0-angle)/360*(2.0*M_PI); }; //NSLog(@" angle: %g", angle); //transforming bView.layer.transform = CATransform3DRotate(basicTrans, rangle, 1.0f, 0.0f, 0.0f); 正如你所看到的,我正在旋转bView使用特定的angular度来获得旋转后的高度值。 正如你所看到的,我有一个angleValueForBlockHeight方法。 这个方法有非常难看的代码。 我的问题是如何计算这个变换所需的angular度。 公式或代码将是伟大的。 请帮帮我。 感谢您的关注。

视图的层颜色正在变化时如何使不同的颜色外观

我正在做一些自定义的下载进度栏(分类)的UIButton (或)我也可以在UIView做到这一点,每一件事情都很好,现在我想改变标题的颜色作为收益的进展,例如作为你在下面的图片中可以看到现在我正在得到什么, 我想要的就像下面的图像 我想将标题的颜色更改为白色或其他颜色作为下载进行,有没有什么办法可以做,任何示例代码。 我通过使用下面的代码来实现这一点 – (void)drawInContext:(CGContextRef)progressContext { CGContextSetFillColorWithColor(progressContext, self.progressLayerColor.CGColor); CGMutablePathRef Path = CGPathCreateMutable(); CGRect boundsRect = self.bounds; CGPathMoveToPoint(Path, NULL, boundsRect.origin.x, boundsRect.origin.y); CGPathAddRect(Path, NULL, CGRectMake(0, 0, self.progress, 35)); CGPathCloseSubpath(Path); CGContextAddPath(progressContext, Path); CGContextFillPath(progressContext); CGContextSetBlendMode(progressContext, kCGBlendModeClear); CGContextFillPath(progressContext); CGPathRelease(Path); }

iOS9上的CALayerInvalidGeometry崩溃“非有限位置的子图层”

iOS 9,Swift 2:我有一个视图控制器与自定义视图崩溃,每当我从它的导航控制器堆栈中popup,引用下面的崩溃: *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'sublayer with non-finite position [inf inf]' 在视图控制器中有太多的事情发布在这里(这正是我正在清理中),但想知道是否有人遇到类似的问题? 我已经看到了非有限位置的子层[inf inf]和一个相关的问题,但都没有解决这个问题。 在整个代码库中找不到CGRectNull,所以我有点难住。

反转一个CALayer掩码

我正在尝试使用CALayer与图像作为内容掩盖UIView。 对于面具,我有复杂的PNG图像。 如果我将这个图像作为view.layer.mask应用,我会得到我想要的相反的行为。 有没有办法改变CAlayer? 这是我的代码: layerMask = CALayer() guard let layerMask = layerMask else { return } layerMask.contents = #imageLiteral(resourceName: "mask").cgImage view.layer.mask = layerMask // What I would like to to is view.layer.mask = layerMask.inverse. // <— 我已经看到反向CAShapeLayers和可变path上的几个职位,但没有什么地方可以扭转CALayer。 我所能做的就是在Photoshop中反转图像,以便alpha被倒转,但问题在于我无法创build具有适合所有屏幕大小的确切大小的图像。 我希望这是有道理的。

使用平移手势移动CALayer时延迟

我使用平移手势在CALayer中移动图像。 我遇到的问题是,图像似乎移动了一点点延迟,并没有出现“卡住”我的手指。 这里是我如何移动图层的实际片段(facePic是CALayer): CGPoint translation =[touche locationInView:self.view]; self.facePic.frame = CGRectMake(translation.x – self.facePic.frame.size.width/2, translation.y – self.facePic.frame.size.height/2, self.facePic.frame.size.width, self.facePic.frame.size.height);

通过UIBezierPath移动CALayer

我有一个图层,将在UIBezierPath上从A点移动到B点。 我发现很多样本是指CAAnimation和UIBezierPath。 但是我需要将我的图层从bezierpath上的指定点移动到另一个点。 任何build议,将不胜感激。 谢谢

如何在IOS中的一个可resize的UIView的angular落?

我正在使用这个代码来完成我的UIView一个angular落: UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect: self.view.bounds byRoundingCorners:(UIRectCornerTopLeft) cornerRadii: CGSizeMake(10.0, 10.0)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.view.bounds; maskLayer.path = maskPath.CGPath; self.view.layer.mask = maskLayer; self.view.layer.masksToBounds = NO; 这个代码可以工作,只要我不调整视图的大小。 如果我使视图更大,新区域不会出现,因为它在遮罩层的边界之外(此遮罩层不会自动调整视图的大小)。 我可以把面具做得像以前一样大,但是它可以在iPad上全屏显示,所以我很担心这个面具很大(我将会有一个以上的面具UI)。 此外,一个超大的面具不适用于我需要右上angular(单独)四舍五入的情况。 有一个更简单,更简单的方法来实现这一点? 更新 :这是我想要实现的: http : //i.imgur.com/W2AfRBd.png (我想要的圆angular在绿色的圆圈内)。 我已经实现了这个工作版本,使用UINavigationController的子类和重写viewDidLayoutSubviews像这样: – (void)viewDidLayoutSubviews { CGRect rect = self.view.bounds; UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:UIRectCornerTopLeft cornerRadii:CGSizeMake(8.0, […]

iOS的UIButton与白色背景上的透明标题

我有一个自定义UIButton透明背景和白色标题。 我正在寻找一个简单的解决scheme,以高亮(白色背景和透明标题)颠倒它,因为它是在系统UISegmentedControl上实现的。 是否有更简单的解决scheme比用作CALayer掩码的快照上的alpha? 如果没有,你能告诉我怎样才能反转CALayer阿尔法?