全部再次见鬼.我似乎无法将RGBA颜色分配给图层的setBorderColor方法.
我试过了:
UIColor *myColor = [UIColor colorWithRed:51.0f/255.0f green:102.0f/255.0f blue:153.0f/255.0f alpha:1.0f];
[l setBorderColor:myColor];
Run Code Online (Sandbox Code Playgroud)
其中l是CALayer类型并且我收到警告:不兼容的指针类型将'UIColor*'发送到'CGColorRed类型的参数'('aka'struct CGColor*').你知道原因是什么吗?警告显示在最后一行.在互联网上,我一遍又一遍地发现这个代码,所以我认为它应该是有效的...谢谢!
这在UIImageView上不使用AFNetworking的类别方法时有效,但我意识到AF可能会覆盖所做的任何事情,因为这发生了异步:
这是在我的自定义UITableViewCell(自己是单元格):
NSURL *url = [NSURL URLWithString:video.thumbnail];
[self.imageView setImageWithURL:url
placeholderImage:[UIImage imageNamed:@"Logo.png"]];
// not working
CALayer *layer = [self.imageView layer];
[layer setMasksToBounds:YES];
[layer setCornerRadius:10.0];
Run Code Online (Sandbox Code Playgroud)
尝试在调用setImageWithURL之前放置它.
这就是我现在所拥有的并且它不是圆角:
NSURL *url = [NSURL URLWithString:_video.thumbnail];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
UIImage *placeHolder = [UIImage imageNamed:@"Logo"];
__weak UIImageView *imageView = self.thumbnail;
[self.thumbnail setImageWithURLRequest:request placeholderImage:placeHolder success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
imageView.image = image;
// round the edges of the video thumbnail
CALayer *layer = [imageView layer];
[layer setMasksToBounds:YES];
[layer setCornerRadius:8.0];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, …Run Code Online (Sandbox Code Playgroud) 该核心动画编程指南让我相信,一个子层可以在默认情况下,主视图的边界之外延伸,而不被修剪.但这不是我发生的事情.
以下是我初始化图层托管自定义视图的方法:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self != nil) {
mBaseImage = [[NSImage imageNamed: @"Button.png"] retain];
mSliderImage = [[NSImage imageNamed: @"Track.png"] retain];
mRootLayer = [CALayer layer];
mRootLayer.masksToBounds = NO;
[self setLayer: mRootLayer ];
[self setWantsLayer: YES];
mRootLayer.contents = mBaseImage;
mSliderLayer = [CALayer layer];
[mRootLayer addSublayer: mSliderLayer];
NSSize imSize = [mSliderImage size];
NSRect sliderBounds = NSMakeRect( 0.0f, 0.0f, imSize.width, imSize.height );
mSliderLayer.bounds = sliderBounds;
mSliderLayer.contents = mSliderImage;
mSliderLayer.position = NSMakePoint( 31.0f, 31.0f );
}
return …Run Code Online (Sandbox Code Playgroud) 我正在创建一个 UI,其中有一副你可以从屏幕上滑动的卡片。
我希望能够做的是创建一个 UIView 的子类,它代表每张卡片,然后修改变换属性以将它们向后移动(z 轴)并向上移动一点(y 轴)以获得外观一副牌。
阅读它我发现我需要使用 CATransformLayer 而不是普通的 CALayer 以便 z 轴不会变平。我通过创建一个 CATransformLayer 将其添加到 CardDeckView 的图层中,然后将我所有的卡片添加到该 CATransformLayer 中。代码看起来有点像这样:
在初始化中:
// Initialize the CATransformSublayer
_rootTransformLayer = [self constructRootTransformLayer];
[self.layer addSublayer:_rootTransformLayer];
Run Code Online (Sandbox Code Playgroud)
constructRootTransformLayer(angle 方法是多余的,本来打算调整甲板的角度但后来决定不这样做):
CATransformLayer* transformLayer = [CATransformLayer layer];
transformLayer.frame = self.bounds;
// Angle the transform layer so we an see all of the cards
CATransform3D rootRotateTransform = [self transformWithZRotation:0.0];
transformLayer.transform = rootRotateTransform;
return transformLayer;
Run Code Online (Sandbox Code Playgroud)
然后添加卡片的代码如下所示:
// Set up a CardView as a wrapper for the contentView
RVCardView* cardView = [[RVCardView …Run Code Online (Sandbox Code Playgroud) 我已经使用UIBezierPath在左上角和右上角实现了一个带圆角矩形的UIView.但之后,当我向视图添加阴影时,它不会显示阴影.如果我只是删除bezier圆角,那么阴影效果非常好.但现在只有圆角出现没有任何阴影.这是我的代码
override func drawRect(rect: CGRect)
{
super.drawRect(rect)
let shapeLayer : CAShapeLayer = CAShapeLayer(layer: centerView.layer)
shapeLayer.path = UIBezierPath(roundedRect: centerView.layer.bounds, byRoundingCorners: UIRectCorner.TopRight|UIRectCorner.TopLeft, cornerRadii: CGSizeMake(15,15)).CGPath
centerView.layer.mask = shapeLayer
centerView.layer.masksToBounds = false
centerView.layer.shadowOffset = CGSizeMake(0,-2)
centerView.layer.shadowRadius = 0.5
centerView.layer.shadowOpacity = 0.7
centerView.layer.shadowColor = UIColor(red: 0.867, green: 0.867, blue: 0.867, alpha: 1).CGColor
centerView.layer.shadowPath = UIBezierPath(roundedRect: centerView.layer.bounds, byRoundingCorners: UIRectCorner.TopRight|UIRectCorner.TopLeft, cornerRadii: CGSizeMake(15,15)).CGPath
}
Run Code Online (Sandbox Code Playgroud)
这里我覆盖了UITableViewCell的drawRect,而centerView是它的子视图.此外,我尝试为中心视图子类化UIView,这似乎也不起作用.
CALayer的mask属性和maskToBounds属性是否相互冲突?
我正在尝试CALayer使用以下代码将仿射转换应用于:
var myLayer:CALayer!
myLayer.affineTransform = CGAffineTransformMakeRotation(0)
Run Code Online (Sandbox Code Playgroud)
但我遇到了错误
无法分配给属性:'myLayer'是不可变的.
有什么必要解决这个问题?
AVFoundation没有为我的视频添加叠加层.我不确定我做错了什么.我已经尝试使叠加层完全变白,但它没有放在视频上.当视频播放时,它必须播放AVMutableComposition Track而不是我添加的exporter.videoComposition.我对AVFoundation的经验不足以了解出了什么问题.
AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];
// 3 - Video track
AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo
preferredTrackID:kCMPersistentTrackID_Invalid];
// [videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,self.videoAsset.duration)
// ofTrack:[[self.videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
// atTime:kCMTimeZero error:nil];
CMTime insertTime = kCMTimeZero;
for(AVURLAsset *videoAsset in self.videoArray){
[videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:insertTime error:nil];
// Updating the insertTime for the next insert
insertTime = CMTimeAdd(insertTime, videoAsset.duration);
}
// 3.1 - Create AVMutableVideoCompositionInstruction
AVMutableVideoCompositionInstruction *mainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
mainInstruction.timeRange = videoTrack.timeRange;
// 3.2 - Create an AVMutableVideoCompositionLayerInstruction for the video …Run Code Online (Sandbox Code Playgroud) 在我的场景中,我有2个视图:第一个保存CALayer实例(条形图),另一个保存CAGradientLayer并放置在第一个上。下图描述了当前状态。
但是我需要将此渐变仅应用于第一个视图的条形图(CALayer)。
我没有找到与我的问题有关的任何信息。任何帮助表示赞赏。
我一直在到处寻找一个被问过很多次的问题的答案。我花了几个小时浏览 SO 和 Google。必须有一个不需要费力搬山的答案。
我正在开发矢量绘图应用程序,最终使绘图和撤消功能正常工作。现在我需要一个橡皮擦:-o
编辑:根据@DonMag 的精彩文章,我能够非常接近橡皮擦,但仍然有些不对劲。因此,我将尝试解释我的视图和图层在应用程序中的位置以及我这样做的原因:
从底部视图/层开始到顶部......
BackgroundImageView - 我使用这个图像视图来保存绘图表面的“背景”。它是一个可以更改的层,可以保存和调用新的“模板”。我把它分开,这样用户就不能擦除绘图表面。背景由 CAShapeLayers 组成,用于表示不同的纸张类型。
MainImageView - 我使用这个图像视图来完成用户启动的所有绘图。所以我触摸并拖动我的手指,新的 CAShapeLayer 被添加到图像视图中。这使用户的绘图与“绘图表面”分开。这也是我希望擦除发生的地方
PageImagesView - 我使用这个视图来保存用户可以添加到页面的图像,并移动/调整它们的大小。我不希望橡皮擦影响图像,但是如果 MainImageView 中绘制的一条线穿过图像并需要擦除,它应该让图像显示出来,而不是删除图像的某些部分。
我还添加了另一个图层,试图让橡皮擦工作,并将其称为“EraserImageView”,并将“蒙版”绘制到其中,然后尝试将该蒙版应用于 MainImageView。
这是我的绘图代码,每次调用 touchesMoved 时都会调用:
编辑: 将橡皮擦代码添加到我的绘图代码中。
if eraser {
let linePath = UIBezierPath()
for (index, point) in line.enumerated() {
if index == 0 {
midPoint = CGPoint(
x: (point.x + point.x) / 2,
y: (point.y + point.y) / 2
)
linePath.move(to: midPoint!)
} else {
midPoint = CGPoint(
x: (point.x + line[index - 1].x) / …Run Code Online (Sandbox Code Playgroud) 
显然在另一个图像下面有一个图像,那么超级图像(带有邮箱图标的图像)只是设计为在Photoshop或Gimp等中透明,或者他们在Cocoa中使用了一些其他很酷的技巧?
我想复制这个样子.
谢谢!
我对CALayer不太满意,但是我需要画一个加号(+),并且我不想使用图像来制作动画。有什么帮助吗?
假设有一个UIView(0,0,100,100),它具有两个SubView,一个是(-5,-5,10,10),第二个是(0,95,10,10)。我想让第一个SubView从superView溢出,而不是secondOne。UIView中是否可以设置任何属性,以防止UIView的SuperView溢出?或实现此目标的最佳方法是什么?
注意:此处的坐标为(x,y,Width,Height)的形式
更新:由于有些人将这个问题标记为不清楚,所以让我添加一些要点:
clipToBoundsUIView的属性,但是这会让所有subViews都被裁剪,但是我的问题是相反的。如果尚不清楚,请在评论中让我知道。
我在Obj-C上使用这个代码,它确实有效:
CALayer *btnLayer = [self.priceLabel layer];
[btnLayer setMasksToBounds:YES];
[btnLayer setCornerRadius:5.0f];
Run Code Online (Sandbox Code Playgroud)
它确实在我的按钮CALayer上形成了圆角.
但是没有在swift上工作:
var btnLayer:CALayer! = self.priceLabel.layer
[btnLayer.masksToBounds:true]
[btnLayer.cornerRadius = 5.0]
Run Code Online (Sandbox Code Playgroud) calayer ×13
ios ×9
swift ×5
objective-c ×4
cocoa ×2
cocoa-touch ×2
afnetworking ×1
avfoundation ×1
cashapelayer ×1
cliptobounds ×1
dropshadow ×1
eraser ×1
image ×1
macos ×1
overlay ×1
quartz-core ×1
uikit ×1