我們的主要UIView是一個帶有固定背景圖像的UIScrollView(很明顯,很明顯)。在該scrollView中,我們有幾個UIViews用於保存內容並隨着用戶滾動(也是普通的)而上下滾動。那些UIViews每個都有自己的背景,簡單的漸變從白色到黑色。如何在UIView上使用滾動到固定背景上的CGBlendMode?
目標是讓這些(內部)UIViews的背景漸變部分不透明,並使用除「kCGBlendModeNormal」(特別是,「kCGBlendModeOverlay」)以外的CGBlendMode。當UIViews在其上方向上和向下滾動時,您應該能夠看到「父」scrollView的固定背景圖像。
- (void)drawRect:(CGRect)rect {
gradientStart = [UIColor colorWithRed:1 green:1 blue:1 alpha:1.0];
gradientEnd = [UIColor colorWithRed:0 green:0 blue:0 alpha:1.0];
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat locations[2] = { 0.0f, 1.0f };
NSArray *colors = [NSArray arrayWithObjects:(id)gradientStart.CGColor, (id)gradientEnd.CGColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)colors, locations);
CGColorSpaceRelease(colorSpace);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetAlpha(context, 0.50); //this works!
CGContextSetBlendMode(context, kCGBlendModeOverlay); //doesn’t seem to do anything!
CGContextClearRect(context, rect);
CGPoint startPoint, endPoint;
startPoint.x = 0.0;
startPoint.y = 0.0;
endPoint.x = 0.0;
endPoint.y = rect.size.height;
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGGradientRelease(gradient);
[super drawRect:rect];
}
除了被忽略的CGContextSetBlendMode之外,一切都按預期工作。我們似乎無法找到一種方法來改變UIView的blendMode相對於它背後的東西,就像你使用alpha的方式一樣。請注意,這與在SINGLE UIView中構建多個圖層不同;在這種情況下,這種技術確實會將圖層的blendMode更改爲「頂部」。我們希望看到父scrollView的固定背景圖像(當我們向上和向下滾動子視圖時),同時應用alpha和overlay混合。
這裏的顯示問題的圖像:在您的幫助http://img2.sbck.us/blendmode.png
謝謝!
我們的證據肯定會與您同意,但我們希望我們錯過了一些東西。對我來說,任何可以用alpha完成的事情都應該可以通過blendMode完成。它們結合起來定義「前景像素如何與背景像素混合」。但這並不意味着它按照它應該的方式工作。 – 2011-02-01 01:12:21