簡體   English   中英

放置完整尺寸的圖像以適合CALayer的整個屏幕

[英]Place a full sized image to fit the entire screen in a CALayer

我有一張圖片(png),該圖片必須填滿我應用的整個屏幕。 我正在使用CALayers並以編程方式進行所有操作,但這仍然聽起來有些瑣碎,但我無法使其正常工作。 我有兩個版本的圖像:視網膜版本(2048px x 1536px)和非視網膜版本1024px x 768px)。 該圖像在資產目錄中列出為通用圖像

我認為代碼很簡單:

// CREATE FULL SCREEN CALAYER  
CALayer *myLayer = [[CALayer alloc] init];
[myLayer setBounds:CGRectMake(0, 0, bounds.size.width, bounds.size.height)]; 
[myLayer setPosition:CGPointMake(bounds.size.width/2, bounds.size.height/2)];
[self.view.layer addSublayer:myLayer];

// LOAD THE IMAGE INTO THE LAYER —— AM EXPECTING IT TO FILL THE LAYER
UIImage *layerImage = [UIImage imageNamed:@"infoScreen"];
CGImageRef image = [layerImage CGImage];
[myLayer setContents:(__bridge id)image];
[myLayer setContentsGravity:kCAGravityCenter]; /* IT WORKS FINE IF I USE setContentsGravity:kCAGravityResizeAspectFill */

此代碼可在非iPad視網膜上正常工作。 但是,在Retina iPad上,圖像始終以實際大小的兩倍加載(因此顯示為放大)。 我正在使用模擬器和iOS8。我在做什么錯?

使用功能UIGraphicsBeginImageContextWithOptions(大小:CGSize,不透明:布爾,比例:CGFloat)來開始圖像處理

上面函數中的最后一個參數確定圖形的縮放比例。 您可以通過檢索主屏幕的scale屬性來設置此值。 很快我就可以這樣:var screen = UIScreen.mainScreen()var scale = screen.scale

希望能幫助到你。

編輯:-快速執行此操作的代碼,您可以對其進行修改以適合您的需要。

    UIGraphicsBeginImageContextWithOptions(rect.size, true, 0.0)
    var ctx : CGContextRef = UIGraphicsGetCurrentContext()
    <UIImage>.drawInRect(rect)

我遇到了同樣的問題,可以通過在CALayer上設置contentsScale值來解決-由於某些原因,即使在Retina設備上,CALayers的默認縮放比例也始終為1.0。

layer.contentsScale = [UIScreen mainScreen].scale;

另外,如果您要使用CAShapeLayer繪制形狀,並且想知道其邊緣在視網膜設備上看起來有點鋸齒,請嘗試:

shapeLayer.rasterizationScale = [UIScreen mainScreen].scale;
shapeLayer.shouldRasterize = YES;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM