$result = ['5' => 'cherry', '7' => 'apple'];
array_multisort($result, SORT_ASC);
print_r($result);
Массив ([0] => яблоко [1] => вишня)
//...
array_multisort($result, SORT_DESC);
//...
Массив ([0] => вишня [1] => яблоко)
Начиная с iOS 7, в UIImage
существует новый метод для указания режима рендеринга. Использование режима рендеринга UIImageRenderingModeAlwaysTemplate
позволит цвету изображения управлять цветом оттенка кнопки.
Objective-C
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *image = [[UIImage imageNamed:@"image_name"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[button setImage:image forState:UIControlStateNormal];
button.tintColor = [UIColor redColor];
Swift
let button = UIButton(type: .custom)
let image = UIImage(named: "image_name")?.withRenderingMode(.alwaysTemplate)
button.setImage(image, for: .normal)
button.tintColor = UIColor.red
Swift 4 с customType:
let button = UIButton(frame: aRectHere)
let buttonImage = UIImage(named: "imageName")
button.setImage(buttonImage?.withRenderingMode(.alwaysTemplate), for: .normal)
button.tintColor = .white
Swift 3:
Это решение может быть удобным, если вы уже настроили свой образ через построитель интерфейса xCode. В основном у вас есть одно расширение для раскраски изображения:
extension UIImage {
public func image(withTintColor color: UIColor) -> UIImage{
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.translateBy(x: 0, y: self.size.height)
context.scaleBy(x: 1.0, y: -1.0)
context.setBlendMode(CGBlendMode.normal)
let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
context.clip(to: rect, mask: self.cgImage!)
color.setFill()
context.fill(rect)
let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
}
Затем вы можете подготовить это расширение UIButton для раскраски изображения для определенного состояния:
extension UIButton {
func imageWith(color:UIColor, for: UIControlState) {
if let imageForState = self.image(for: state) {
self.image(for: .normal)?.withRenderingMode(.alwaysTemplate)
let colorizedImage = imageForState.image(withTintColor: color)
self.setImage(colorizedImage, for: state)
}
}
}
Использование:
myButton.imageWith(.red, for: .normal)
PS (хорошо работает и в ячейках таблицы, вам не нужно вызывать метод setNeedDisplay()
, изменение цвета происходит немедленно из-за расширения UIImage ..
Пользовательские кнопки отображаются в соответствующих цветах изображений. Установка типа кнопки в «Систему» в раскадровке (или UIButtonTypeSystem
в коде) отобразит изображение кнопки с цветом оттенков по умолчанию.
(проверено на iOS9, Xcode 7.3)
Как уже упоминал Рик в своем сообщении , вы можете установить режим рендеринга в коде, вы также можете сделать это непосредственно в каталоге изображений, см. прикрепленный образ ниже. Просто установите для параметра Render As
значение Template Image
[/g2]
Предостережение. У меня были проблемы с iOS 7 и этим подходом. Поэтому, если вы используете iOS 7, вы также можете сделать это в коде, чтобы убедиться, что описано здесь здесь .
В Swift вы можете сделать это так:
var exampleImage = UIImage(named: "ExampleImage.png")?.imageWithRenderingMode(.AlwaysTemplate)
Затем в вашем viewDidLoad
exampleButtonOutlet.setImage(exampleImage, forState: UIControlState.Normal)
И чтобы изменить цвет
exampleButtonOutlet.tintColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1) //your color
EDIT Xcode 8 Теперь вы можете также просто режим рендеринга изображения в ваших .xcassets для Template Image, а затем вам не нужно специально объявлять его в var exampleImage
больше
Вы должны попробовать
После установки рамки
NSArray *arr10 =[NSArray arrayWithObjects:btn1,btn2,nil];
for(UIButton *btn10 in arr10)
{
CAGradientLayer *btnGradient2 = [CAGradientLayer layer];
btnGradient2.frame = btn10.bounds;
btnGradient2.colors = [NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:151.0/255.0f green:206.0/255.5 blue:99.0/255.0 alpha:1] CGColor],
(id)[[UIColor colorWithRed:126.0/255.0f green:192.0/255.5 blue:65.0/255.0 alpha:1]CGColor],
nil];
[btn10.layer insertSublayer:btnGradient2 atIndex:0];
}
Если у вас есть пользовательская кнопка с фоновым изображением. Вы можете установить цвет оттенка вашей кнопки и переопределить изображение следующим образом.
В активах выберите фон кнопки, который вы хотите установить цвет оттенка.
В инспекторе атрибутов изображения установите значение render как «Template Image»
Теперь, когда вы устанавливаете button.tintColor = UIColor.red
кнопка будет отображаться красным цветом.
Swift 3.0
let image = UIImage(named:"NoConnection")!
warningButton = UIButton(type: .system)
warningButton.setImage(image, for: .normal)
warningButton.tintColor = UIColor.lightText
warningButton.frame = CGRect(origin: CGPoint(x:-100,y:0), size: CGSize(width: 59, height: 56))
self.addSubview(warningButton)
Если вы хотите вручную замаскировать свое изображение, здесь обновляется код, который работает со сетками сетчатки
- (UIImage *)maskWithColor:(UIColor *)color
{
CGImageRef maskImage = self.CGImage;
CGFloat width = self.size.width * self.scale;
CGFloat height = self.size.height * self.scale;
CGRect bounds = CGRectMake(0,0,width,height);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext = CGBitmapContextCreate(NULL, width, height, 8, 0, colorSpace, kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast);
CGContextClipToMask(bitmapContext, bounds, maskImage);
CGContextSetFillColorWithColor(bitmapContext, color.CGColor);
CGContextFillRect(bitmapContext, bounds);
CGImageRef cImage = CGBitmapContextCreateImage(bitmapContext);
UIImage *coloredImage = [UIImage imageWithCGImage:cImage scale:self.scale orientation:self.imageOrientation];
CGContextRelease(bitmapContext);
CGColorSpaceRelease(colorSpace);
CGImageRelease(cImage);
return coloredImage;
}
Не уверен, что именно вы хотите, но метод этой категории будет маскировать UIImage с указанным цветом, чтобы вы могли иметь одно изображение и изменять его цвет по своему желанию.
ImageUtils.h
- (UIImage *) maskWithColor:(UIColor *)color;
ImageUtils.m
-(UIImage *) maskWithColor:(UIColor *)color
{
CGImageRef maskImage = self.CGImage;
CGFloat width = self.size.width;
CGFloat height = self.size.height;
CGRect bounds = CGRectMake(0,0,width,height);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext = CGBitmapContextCreate(NULL, width, height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
CGContextClipToMask(bitmapContext, bounds, maskImage);
CGContextSetFillColorWithColor(bitmapContext, color.CGColor);
CGContextFillRect(bitmapContext, bounds);
CGImageRef cImage = CGBitmapContextCreateImage(bitmapContext);
UIImage *coloredImage = [UIImage imageWithCGImage:cImage];
CGContextRelease(bitmapContext);
CGColorSpaceRelease(colorSpace);
CGImageRelease(cImage);
return coloredImage;
}
Импортировать категорию ImageUtils и сделать что-то вроде этого ...
#import "ImageUtils.h"
...
UIImage *icon = [UIImage imageNamed:ICON_IMAGE];
UIImage *redIcon = [icon maskWithColor:UIColor.redColor];
UIImage *blueIcon = [icon maskWithColor:UIColor.blueColor];
kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast
на CGBitmapContextCreate
– Luis Ascorbe
4 February 2014 в 10:26
UIDevice
: CGFloat scale = [UIScreen mainScreen].scale; CGFloat width = self.size.width * scale; CGFloat height = self.size.height * scale;
Свойство scale
существует как iOS 4.0.
– Philipp Frischmuth
8 January 2015 в 13:29
scale
, когда создан UIImage
: UIImage *coloredImage = [UIImage imageWithCGImage:cImage scale:scale orientation:self.imageOrientation];
– Philipp Frischmuth
8 January 2015 в 13:42
Для Xamarin.iOS (C #):
UIButton messagesButton = new UIButton(UIButtonType.Custom);
UIImage icon = UIImage.FromBundle("Images/icon.png");
messagesButton.SetImage(icon.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate), UIControlState.Normal);
messagesButton.TintColor = UIColor.White;
messagesButton.Frame = new RectangleF(0, 0, 25, 25);
Вы должны установить режим рендеринга изображения на UIImageRenderingModeAlwaysTemplate
, чтобы tintColor
повлиял на UIImage. Вот решение в Swift:
let image = UIImage(named: "image-name")
let button = UIButton()
button.setImage(image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate), forState: .Normal)
button.tintColor = UIColor.whiteColor()
Изменить цвет изображения кнопки или цвет оттенка изображения Swift:
btn.imageView? .image = btn.imageView? .image? .withRenderingMode (.alwaysTemplate)
btn.imageView ? .tintColor = #colorLiteral (красный: 0, зеленый: 0, синий: 0, альфа: 1)
tintColor
слишком темный, убедитесь, чтоadjustsImageWhenHighlighted
НЕТ. (Или в IB: «Выделенные настройки изображения» не отмечены.) – Jason Moore 26 November 2015 в 20:47