Tag: calayer

使用CALayer委托

我有一个UIView的图层将有子层。 我想为每个子层分配委托,所以委托方法可以告诉图层要绘制的内容。 我的问题是: CALayer的代表应该提供什么? 该文件说,不要使用图层所在的UIView,因为这是为视图的主要CALayer保留。 但是,创build另一个类只是作为我创build的CALayers的代表,这就违背了不inheritanceCALayer的目的。 人们通常使用什么作为CALayer的代表? 或者我应该只是子类? 另外,为什么实现委托方法的类不需要遵循某种CALayer协议? 这是一个更为广泛的问题,我不太明白。 我认为所有需要实现委托方法的类都需要一个协议规范,以便实现者遵守。

视图内的AVPlayer图层在UIView帧更改时不resize

我有一个UIView包含一个AVPlayer来显示video。 改变方向时,我需要改变video的大小和位置。 我对调整层次不是很有经验,所以我在调整video时遇到了问题。 我开始创buildAVPlayer并将其播放器添加到我的videoHolderView图层: NSURL *videoURL = [NSURL fileURLWithPath:videoPath]; self.avPlayer = [AVPlayer playerWithURL:videoURL]; AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer]; playerLayer.frame = videoHolderView.bounds; playerLayer.videoGravity = AVLayerVideoGravityResizeAspect; playerLayer.needsDisplayOnBoundsChange = YES; [videoHolderView.layer addSublayer:playerLayer]; videoHolderView.layer.needsDisplayOnBoundsChange = YES; 然后,稍后,我更改videoHolderView框架的大小和位置: [videoHolderView setFrame:CGRectMake(0, 0, 768, 502)]; 在这一点上,我需要avPlayer调整到这些相同的尺寸。 这不会自动发生 – avPlayer停留在videoHolderView内的小尺寸。 如果有人可以帮忙,我真的很感激任何意见。 多谢你们。

当我更新模型图层时,CABasicAnimation不能正确animation

我目前正在实现一个animationCALayer transform属性的CABasicAnimation 。 现在,虽然我是Core Animation的新手,但是我已经能够通过各种博客和文章(例如objc.io)来收集使用经常(不正确)推荐的方法来获取animation的非常不好的想法, fillMode和removedOnCompletion属性的animation。 这种方法被很多人认为是不好的做法,因为它会在模型​​层和表示层之间产生差异,所以将来对这些层之一的查询可能与用户所看到的不匹配。 相反,推荐的animation制作方法是在将animation添加到正在animation的图层的同时更新模型图层。 但是,我很难理解这是如何工作的。 我的animation很简单,像这样: CATransform3D updatedTransform = [self newTransformWithCurrentTransform]; // Location 1 CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; transformAnimation.duration = 1; transformAnimation.fromValue = [NSValue valueWithCATransform3D:self.layerBeingAnimated.transform]; // Does not work without this. transformAnimation.toValue = [NSValue valueWithCATransform3D:updatedTransform]; // Location 2 [self.layerBeingAnimated addAnimation:transformAnimation forKey:kTransformAnimationKey]; // Location 3 我已经指出了三个位置,我尝试使用代码更新模型图层 self.layerBeingAnimated.transform = updatedTransform; 在位置1,图层跳转到newTransform并且不animation。 在位置2中,该层完全按照我希望从当前转换到newTransformanimation。 […]

在使用CABasicAnimation旋转CALayer之后,图层跳回到未旋转的位置

我正在试图创造一个下降的硬币。 硬币图像是CALayer上有2个CABasicAnimations – 一个倒下和一个旋转。 当倒下的animation结束时,它停留在那里。 虽然旋转animation应该是随机的,每次都会以不同的angular度结束,但是会popup原来的CALAyer图像。 我希望它保持在完成animation的angular度。 可能吗? 我该怎么做? 码: //Moving down animation: CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"]; anim.duration = 1; anim.autoreverses = NO; anim.removedOnCompletion = YES; anim.fromValue = [NSNumber numberWithInt: -80 – row_height * (8 – _col)]; anim.toValue = [NSNumber numberWithInt: 0]; //Rotation Animation: CABasicAnimation *rota = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; rota.duration = 4; rota.autoreverses = […]

什么原因导致这个错误 “CALayer的立场包含NaN:”

我见过这种情况,只要我旋转一个有UITableView的屏幕就可以了。 我发现它发生在UIViewController的willRotate和didRotate方法调用之间我的同事也在其他地方看到了它,通常是围绕旋转。 它直到最近才开始发生,我们很难理解我们应该如何处理它(谷歌search没有以确切的forms显示错误信息)。 有没有其他人遇到这个知道该怎么办呢?

iOS白色到透明渐变层是灰色的

我有一个CAGradientLayer插入到这个小的细节视图的底部,popup在应用程序的底部。 正如你所看到的,我已经把白色的颜色设置为清晰,但是这个奇怪的灰色正在显现。 有任何想法吗? // Set up detail view frame and gradient [self.detailView setFrame:CGRectMake(0, 568, 320, 55)]; CAGradientLayer *layer = [CAGradientLayer layer]; layer.frame = self.detailView.bounds; layer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil]; layer.startPoint = CGPointMake(1.0f, 0.7f); layer.endPoint = CGPointMake(1.0f, 0.0f); [self.detailView.layer insertSublayer:layer atIndex:0]; 这是有问题的观点:

UIView的ClipToBounds和CALayer的mask到Bounds之间的关系如何?

一个UIView有一个CALayer 。 这很确定。 但是两者似乎都提供了同样的东西。 如果我设置clipsToBounds=YES ,这也会设置图层的masksToBounds=YES ? 为什么不同的名字 有谁知道?

CALayer IOS上的自动布局约束

嗨,我正在开发iPhone应用程序,我试图设置编辑文本的一个边框。 我以下面的方式做了这个: int borderWidth = 1; CALayer *leftBorder = [CALayer layer]; leftBorder.borderColor = [UIColor whiteColor].CGColor; leftBorder.borderWidth = borderWidth; leftBorder.frame = CGRectMake(0, textField.frame.size.height – borderWidth, textField .frame.size.width, borderWidth); [textField.layer addSublayer:leftBorder]; 我在IB的编辑文本中join了一些约束,这样当我旋转我的设备时,它将根据这个调整文本字段的宽度。 我的问题是调整edittext的宽度,而不是调整我为我的编辑文本设置的CALayer的宽度。 所以我想我也必须为CALayer项目设置一些限制。 但我不知道该怎么做。 有人知道吗? 需要帮忙。 谢谢。

UILabel层cornerRadius负面影响性能

我创build了一个文档视图,显示angular落中的页码。 页码是具有半透明背景颜色的uilabel,并具有angular半径(使用view的layer的cornerRadius属性)。 我已经定位这上面的UIScrollView 。 但是,这使得滚动生涩。 如果我删除cornerRadius ,性能是好的。 有什么我可以做的呢? 什么是更好的解决scheme? 它似乎已经在UIWebView实现,没有任何性能问题。

CGLayer和CALayer有什么区别和兼容性?

我很困惑CGLayer和CALayer 。 他们看起来很相似,那么为什么有单独的实现? CGLayer和CALayer什么区别和兼容性?