Решено. Фото - иконка Tap Bar. Чтоб фото профиля показать в цвете. Не монохромно - Получилось. А как сделать круглое?


#1

Добрый день!
Задача установить полноцветное изображение на иконку тап бара.
Думается мне это довольно не сложно должно быть, если знать где искать…
Посоветуйте способ пожалуйста.


#2

Попробовать передать картинку как .withRenderingMode(.alwaysOriginal)


#3

Благодарю. Получилось.


#4

Еще раз добрый день!

В продолжение темы:
Как как поставить фото на иконку в Tab Bar - разобрался.

Получилось сразу как нужно т.е. в Asset было фото 30х30 и круглое (из фигмы)
Начал настраивать получение фото для иконки из совран енного в UserDefaults

не подходит -
1 - слишком большое (с этим разобрался)
2 - совсем не круглое… Вот с этим не могу пока понять как быть.

05

а должно быть вот так:

18 14

При чем в состоянии select - должна появиться обводка

Благодарен за любые идеи!:pray:t2:

Код

Сводка

class TapBarViewController: UITabBarController {

override func viewDidLoad() {
    super.viewDidLoad()
    var i = 0
    
    for item in self.tabBar.items! {
        if let image = item.image {
            i += 1
            if i == 5 {
                var avatar = UIImage()
                if let url = useDef.getImageUrl() {
                    avatar = useDef.getImage(url: url)!

                }
                avatar = resizeImage(image: avatar, targetSize: CGSize(width: 30, height: 30))
                item.image = avatar.withRenderingMode(.alwaysOriginal)
                item.selectedImage = avatar.withRenderingMode(.alwaysOriginal)
            }
        }
    }
    UITabBar.appearance().tintColor = UIColor.white
}

func resizeImage(image: UIImage, targetSize: CGSize) -> UIImage {
   let size = image.size
   
   let widthRatio  = targetSize.width  / size.width
   let heightRatio = targetSize.height / size.height
   
   // Figure out what our orientation is, and use that to form the rectangle
   var newSize: CGSize
   if(widthRatio > heightRatio) {
       newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
   } else {
       newSize = CGSize(width: size.width * widthRatio,  height: size.height * widthRatio)
   }
   
   // This is the rect that we've calculated out and this is what is actually used below
   let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)

    // Actually do the resizing to the rect using the ImageContext stuff
   UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
   image.draw(in: rect)
   let newImage = UIGraphicsGetImageFromCurrentImageContext()
   UIGraphicsEndImageContext()
   
   return newImage!

}

}

extension UIImage {
func imageWithColor(color1: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
color1.setFill()

  let context = UIGraphicsGetCurrentContext() as CGContext?
  context!.translateBy(x: 0, y: self.size.height)
  context!.scaleBy(x: 1.0, y: -1.0);
  context!.setBlendMode(CGBlendMode.normal)

  
  let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) as CGRect
  context!.clip(to: rect, mask: self.cgImage!)
  context!.fill(rect)
  
  let newImage = UIGraphicsGetImageFromCurrentImageContext()! as UIImage
  UIGraphicsEndImageContext()
  
  return newImage

}
}