我必须添加一个UIImageView作为MapView的子视图.为此,我在MapView上创建了一个图层.在这一层,我想放置我的图像,但我得到一个白色的矩形,没有别的.我的图片不可见.
这是代码:
- (void)viewDidLoad
{
//......
CALayer *layer = [CALayer layer];
layer.backgroundColor = [[UIColor whiteColor] CGColor];
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
layer.bounds = CGRectMake(self.mapView.bounds.origin.x,
self.mapView.bounds.origin.y, 80, 300);
}
else
{
layer.bounds = CGRectMake(self.mapView.frame.origin.x,
self.mapView.frame.origin.y, 150, 700);
}
layer.contents = (id)[UIImage imageNamed:@"myImage.png"];
//the name is correct but in the output the image is not visible
[[self.mapView layer] addSublayer:layer];
[layer setNeedsDisplay];
}
Run Code Online (Sandbox Code Playgroud) 我经常读到,在使用大量图像时,使用a CALayer而不是a UIImageView是性能提升.这是有道理的,因为UIImageView在内存中导致3个图像副本,这是Core Animation所需要的.但在我的情况下,我不使用核心动画.
如何将UIImage(或其图像数据)分配给a CALayer然后显示?
我正在尝试在每个切片的中心绘制一个带有段数组和图像的饼图,我已经绘制了饼图,但无法向 cashapelayer 添加图像。我参考了以下Swift帖子:添加图像到 CAShapeLayer,但它没有解决我的问题。
这是我尝试过的。
override func draw(_ rect: CGRect) {
//let context = UIGraphicsGetCurrentContext()
let radius = min(frame.size.width,frame.size.height) * 0.5;
let viewCenter = CGPoint(x: frame.size.width * 0.5, y: frame.size.height * 0.5)
let valueCount = segments.reduce(0){ $0 + $1.value}
var startAngle = -CGFloat(M_PI / 2)
for segment in segments {
let endAngle = startAngle + CGFloat(M_PI * 2) * (segment.value)/valueCount
/*context?.move(to: CGPoint(x: viewCenter.x, y: viewCenter.y))
context?.setFillColor(segment.color.cgColor)
context?.setStrokeColor(UIColor.black.cgColor)
context?.setLineWidth(3.0)
context?.addArc(center: viewCenter, radius: radius, startAngle: startAngle, endAngle: endAngle, …Run Code Online (Sandbox Code Playgroud)