tomar plus fotos dibujar como ios swift uiimage uibarbuttonitem

ios - plus - como tomar screenshot en iphone xr



Cómo establecer la imagen para el botón de la barra con rapidez? (10)

Aquí hay una extension simple en UIBarButtonItem :

let barButton = UIBarButtonItem(image: UIImage(named: "menu"), landscapeImagePhone: nil, style: .Done, target: self, action: #selector(revealBackClicked)) self.navigationItem.leftBarButtonItem = barButton

Estoy tratando de establecer una imagen para el botón de la barra del artículo para el que tengo una imagen como:

con la resolución 30 * 30, pero mientras asigno este botón Imagen a la barra, se ve así:

He asignado la imagen de esta manera:

y si intento hacerlo de esta manera, como hacer una IBOutlet para el botón y establecer Imagen programáticamente, formulo this pregunta y código para eso:

// Outlet for bar button @IBOutlet weak var fbButton: UIBarButtonItem! // Set Image for bar button var backImg: UIImage = UIImage(named: "fb.png")! fbButton.setBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)

pero nada sucedió con esto,

¿Alguien puede decirme qué estoy haciendo mal?

o cual es la forma de bateador para hacer esto?


Estoy usando el último swift (2.1) y la respuesta (Dharmesh Kheni y jungledev) no funciona para mí. El color de la imagen estaba desactivado (cuando se configuraba en IB, era azul y cuando se configuraba directamente en UIButton, era negro). Resulta que podría crear el mismo elemento de barra con el siguiente código:

To design a custom bar icon, follow these guidelines: Use pure white with appropriate alpha transparency. Don’t include a drop shadow. Use antialiasing.


Lo he logrado programáticamente con este código:

import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //create a new button let button: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton //set image for button button.setImage(UIImage(named: "fb.png"), forState: UIControlState.Normal) //add function for button button.addTarget(self, action: "fbButtonPressed", forControlEvents: UIControlEvents.TouchUpInside) //set frame button.frame = CGRectMake(0, 0, 53, 31) let barButton = UIBarButtonItem(customView: button) //assign button to navigationbar self.navigationItem.rightBarButtonItem = barButton } //This method will call when you press button. func fbButtonPressed() { println("Share to fb") } }

Y el resultado será:

De la misma forma que puede configurar el botón para el lado izquierdo también de esta manera:

self.navigationItem.leftBarButtonItem = barButton

Y el resultado será:

Y si desea la misma transacción que tiene el controlador de navegación cuando vuelve con el botón de retroceso predeterminado, puede lograrlo con el botón Atrás personalizado con este código:

func backButtonPressed(sender:UIButton) { navigationController?.popViewControllerAnimated(true) }

Para swift 3.0:

import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //create a new button let button = UIButton.init(type: .custom) //set image for button button.setImage(UIImage(named: "fb.png"), for: UIControlState.normal) //add function for button button.addTarget(self, action: #selector(ViewController.fbButtonPressed), for: UIControlEvents.touchUpInside) //set frame button.frame = CGRect(x: 0, y: 0, width: 53, height: 51) let barButton = UIBarButtonItem(customView: button) //assign button to navigationbar self.navigationItem.rightBarButtonItem = barButton } //This method will call when you press button. func fbButtonPressed() { print("Share to fb") } }

Para swift 4.0:

barButtonItem.image = UIImage(named: "image")


Si su UIBarButtonItem ya está asignado como en un guión gráfico. (printBtn)

@IBOutlet weak var settingBarBtn: UIBarButtonItem! { didSet { let imageSetting = UIImageView(image: UIImage(named: "settings")) imageSetting.image = imageSetting.image!.withRenderingMode(.alwaysOriginal) imageSetting.tintColor = UIColor.clear settingBarBtn.image = imageSetting.image } }


Similar a la solución aceptada, pero puede reemplazar el

let button = UIButton()

con

let button = UIButton() button.frame = CGRectMake(0, 0, 51, 31) //won''t work if you don''t set frame button.setImage(UIImage(named: "fb"), forState: .Normal) button.addTarget(self, action: Selector("fbButtonPressed"), forControlEvents: .TouchUpInside) let barButton = UIBarButtonItem() barButton.customView = button self.navigationItem.rightBarButtonItem = barButton

Aquí está la solución completa, disfruta: (es un poco más limpia que la solución aceptada)

extension UIBarButtonItem { class func itemWith(colorfulImage: UIImage?, target: AnyObject, action: Selector) -> UIBarButtonItem { let button = UIButton(type: .custom) button.setImage(colorfulImage, for: .normal) button.frame = CGRect(x: 0.0, y: 0.0, width: 44.0, height: 44.0) button.addTarget(target, action: action, for: .touchUpInside) let barButtonItem = UIBarButtonItem(customView: button) return barButtonItem } }


Solo se requieren dos líneas de código para esto

Swift 3.0

self.navigationItem.leftBarButtonItem = nil let button = UIButton(type: .custom) button.setImage(UIImage (named: "ChatTab"), for: .normal) button.frame = CGRect(x: 0.0, y: 0.0, width: 35.0, height: 35.0) //button.addTarget(target, action: nil, for: .touchUpInside) let barButtonItem = UIBarButtonItem(customView: button) let button2 = UIButton(type: .custom) button2.setImage(UIImage (named: "ActivityTab"), for: .normal) button2.frame = CGRect(x: 0.0, y: 0.0, width: 35.0, height: 35.0) //button.addTarget(target, action: nil, for: .touchUpInside) let barButtonItem2 = UIBarButtonItem(customView: button2) self.navigationItem.rightBarButtonItems = [barButtonItem, barButtonItem2]


Su problema se debe a la forma en que se ha hecho el icono; no se ajusta a las especificaciones del icono de la barra de pestañas personalizadas de Apple:

let closeButtonImage = UIImage(named: "ic_close_white") navigationItem.rightBarButtonItem = UIBarButtonItem(image: closeButtonImage, style: .plain, target: self, action: #selector(ResetPasswordViewController.barButtonDidTap(_:))) func barButtonDidTap(_ sender: UIBarButtonItem) { }

De las pautas:

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/BarIcons.html#//apple_ref/doc/uid/TP40006556-CH21-SW1

Algo que sería posible se ve así. Puede encontrar esos íconos en la mayoría de los sitios de íconos gratuitos de la barra de pestañas.


Swift 4.

@IBOutlet weak var settingBarBtn: UIBarButtonItem! { didSet { let imageSetting = UIImageView(image: UIImage(named: "settings")) imageSetting.image = imageSetting.image!.withRenderingMode(.alwaysOriginal) imageSetting.tintColor = UIColor.clear settingBarBtn.image = imageSetting.image } }


Una solución fácil puede ser la siguiente

let button: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton

luego vaya a sus Fondos de activos. Seleccione la imagen y vaya al Inspector de atributos y seleccione "Imagen original" en Reder como opción.


Puede usar este código para el botón de barra múltiple con imagen personalizada:

let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30)) btn.setImage(UIImage(named: Constants.ImageName.print)?.withRenderingMode(.alwaysTemplate), for: .normal) btn.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handlePrintPress(tapGesture:)))) printBtn.customView = btn

El resultado será este: