回答
當你說「應用它在圖像作爲漸變「,你的意思是作爲一個面具(揭示頂部的圖像,讓它淡化圖像t o底部透明)?如果是這樣的話,你可以應用梯度作爲掩模,使用CAGradientLayer
:
CAGradientLayer *gradientMask = [CAGradientLayer layer];
gradientMask.frame = self.imageView.bounds;
gradientMask.colors = @[(id)[UIColor whiteColor].CGColor,
(id)[UIColor clearColor].CGColor];
self.imageView.layer.mask = gradientMask;
上面做一個簡單的垂直梯度(因爲默認是垂直的,線性漸變)。但你問了startPoint
,endPoint
和locations
。例如,如果,你就想你的面具水平應用,你會怎麼做:
gradientMask.startPoint = CGPointMake(0.0, 0.5); // start at left middle
gradientMask.endPoint = CGPointMake(1.0, 0.5); // end at right middle
如果你想有兩個梯度,一個在第一個10%,另一個在最後的10%,你會怎麼做:
gradientMask.colors = @[(id)[UIColor clearColor].CGColor,
(id)[UIColor whiteColor].CGColor,
(id)[UIColor whiteColor].CGColor,
(id)[UIColor clearColor].CGColor];
gradientMask.locations = @[@0.0, @0.10, @0.90, @1.0];
如果您想通過本身(而不是作爲掩模)一個簡單的梯度,你會創建一個view
,然後添加漸變層到它:
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = @[(id)[UIColor whiteColor].CGColor,
(id)[UIColor blackColor].CGColor];
[view.layer addSublayer:gradient];
請參閱CAGradientLayer
class reference。
感謝您的幫助,bur我無法理解顏色的起點,終點和位置。 – user2823044
@ user2823044我已經用'startPoint','endPoint'和'locations'的例子更新了我的例子。根據垂直漸變的例子,你不需要它們,但是如果你想讓漸變從左到右,你可以使用'startPoint'和'endPoint'。如果您希望漸變不在「startPoint」和「endPoint」範圍內均勻分佈,則可以使用「位置」(如果您擁有兩個以上的「顏色」,您只能真正玩過它)。 – Rob
我如何繪製漸變單色(黑色),從下到上依次遞減alphs – user2823044
-(void) drawGradientinBounds: (CGRect) currentBounds withColors:(NSArray*) colors andPercentages:(NSArray *)percentages andGradientDirectionIsVertical:(BOOL)isGradientDirectionVertical
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGGradientRef glossGradient;
CGColorSpaceRef rgbColorspace;
size_t num_locations = [percentages count];
CGFloat locations[num_locations];
for(int i=0;i<num_locations;i++)
locations[i] = [[percentages objectAtIndex:i] floatValue];
int comps = [colors count]*4;
CGFloat components[comps];
for(int i = [colors count]-1;i>=0;i--)
{
comps--;
UIColor *c = [colors objectAtIndex:i];
const CGFloat *cg = CGColorGetComponents([c CGColor]);
components[comps] = cg[3];
comps--;
components[comps] = cg[2];
comps--;
components[comps] = cg[1];
comps--;
components[comps] = cg[0];
}
rgbColorspace = CGColorSpaceCreateDeviceRGB();
glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);
CGPoint topCenter;
CGPoint endCenter;
if(isGradientDirectionVertical)
{
topCenter = CGPointMake(CGRectGetMidX(currentBounds), currentBounds.origin.y);
endCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetHeight(currentBounds)+currentBounds.origin.y);
}
else
{
topCenter = CGPointMake(currentBounds.origin.x,CGRectGetMidY(currentBounds));
endCenter = CGPointMake(CGRectGetWidth(currentBounds)+currentBounds.origin.x,CGRectGetMidY(currentBounds));
}
CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, endCenter, 0);
CGGradientRelease(glossGradient);
CGColorSpaceRelease(rgbColorspace);
}
和輸入這種方法是界限,colorArray:
[NSArray arrayWithObjects:[UIColor blackColor], [UIColor whiteColor], nil]
percentageArray:
[NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:1.0], nil]
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.view.bounds;
gradient.startPoint = CGPointMake(1.0, 1.0); //Dark From bottom
gradient.endPoint = CGPointMake(1.0, 0);
gradient.colors = [NSArray arrayWithObjects:
(id)[[UIColor blackColor] CGColor],
(id)[[UIColor clearColor] CGColor], nil];
[self.view.layer insertSublayer:gradient atIndex:0];
我剛剛爲Swift 2.0寫了一個UIImage擴展。也許這有些用處。你可以用一個UIColor(任意數字)的數組和一個應該繪製漸變的框架來調用它。
extension UIImage {
class func convertGradientToImage(colors: [UIColor], frame: CGRect) -> UIImage {
// start with a CAGradientLayer
let gradientLayer = CAGradientLayer()
gradientLayer.frame = frame
// add colors as CGCologRef to a new array and calculate the distances
var colorsRef = [CGColor]()
var locations = [NSNumber]()
for i in 0 ... colors.count-1 {
colorsRef.append(colors[i].CGColor as CGColorRef)
locations.append(Float(i)/Float(colors.count-1))
}
gradientLayer.colors = colorsRef
gradientLayer.locations = locations
// now build a UIImage from the gradient
UIGraphicsBeginImageContext(gradientLayer.bounds.size)
gradientLayer.renderInContext(UIGraphicsGetCurrentContext()!)
let gradientImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// return the gradient image
return gradientImage
}
}
這樣稱呼它:
let colors = [
UIColor.blueColor(),
UIColor.greenColor()
// and many more if you wish
]
let gradientImage = UIImage.convertGradientToImage(colors, frame: navigationBar.bounds)
和應用具有:
.backgroundColor = UIColor(patternImage: gradientImage)
或
.setBackgroundImage(gradientImage, forBarMetrics: .Default)
你美麗,美麗的男人/女人/孩子!我有一個核心圖形漸變渲染設置,爲99%的圖像工作,我試圖繪製梯度的頂部,但總是有1%的人無法畫出圖像,最終屠殺了圖像的質量,使其全部被破壞/顆粒狀/像素化。漸變圖層無處不在(或者看起來很像)。 。 – CMash
這是最好的方法,爲我工作的要求
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = yourImageView.layer.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:
(id)[UIColor colorWithWhite:1.0f alpha:1.0f].CGColor,
(id)[UIColor colorWithWhite:0.0f alpha:0.9f].CGColor,
nil];
gradientLayer.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:1.0f],
nil];
[yourImageView.layer addSublayer:gradientLayer];
- 1. 如何繪製漸變iOS中
- 2. 使用漸變圖像在UILabel上繪製文本
- 3. 繪製漸變
- 4. 在IOS中同一視圖上繪製2個帶有漸變的矩形(swift)
- 5. iOS在視圖的一部分繪製漸變
- 6. iOS - 繪製漸變 - 斯威夫特
- 7. 在上面繪製圖像pdf iOS 5
- 8. 在畫布上繪製漸變形狀
- 9. 在屏幕上繪製漸變
- 10. 在使用漸變蒙版重繪圖像時IOS上的性能問題
- 11. 繪製漸變圓
- 12. 如何在Android中在畫布上繪製平滑/漸變的漸變
- 13. 在libgdx中繪製漸變的子集
- 14. 繪製漸變像UITabBar與tintColor
- 15. 在iOS中繪製全屏線性漸變的最快方法
- 16. 繪製UIView的徑向漸變iOS上半部分區域
- 17. iOS - 用CGContext和變換繪製圖像
- 18. 帶圖像的徑向漸變IOS
- 19. 在Android中繪製圓錐漸變
- 20. 在Python中使用PIL繪製漸變
- 21. 在黑莓中繪製徑向漸變?
- 22. 在SpriteKit中繪製漸變線?
- 23. 在cocos2d中連續繪製漸變線
- 24. WPF 3D - 在複雜幾何圖形上繪製漸變畫筆
- 25. JFreeChart條形圖 - 繪製沒有漸變填充的繪圖
- 26. 在繪圖區域上繪製圖像
- 27. 圖像中的CSS漸變
- 28. iOS版:圖像漸變透明度
- 29. 後記:繪製漸變
- 30. 用LibGDX繪製漸變線
我需要將它應用在圖像上作爲漸變。 – user2823044
您可以使用Brad Larson的GPUIImage庫,它具有良好的文檔記錄並且非常強大。 它在圖像上也有很多功能:https://github.com/BradLarson/GPUImage – foOg
你到目前爲止嘗試了什麼? – vikingosegundo