2015-05-18 4 views
2

В моем приложении у меня есть метод, который преобразует UIView в UIImage. Он отлично работает на каждом устройстве, за исключением iPhone 6 plus, который имеет более высокую плотность пикселей.UIImage масштабируется на iPhone 6Plus

Я создаю selectionIndicatorImage для моего UITabBar, преобразуя серый вид в UIImage. Я знаю, что это, вероятно, не самая лучшая практика в этом сценарии, но в любом случае мне нужен этот метод, отлично работающий для других вещей в приложении.

Это мой UIImage инициализатор:

convenience init?(view: UIView) { 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0) 
    view.layer.renderInContext(UIGraphicsGetCurrentContext()) 

    var img = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 

    self.init(CGImage: img.CGImage) 
} 

Это порождает следующие результаты:

iPhone 6 Plus

iPhone 6 Plus

iPhone 6

iPhone 6

Любые мысли?

Приветствия

+0

попробуйте использовать клипыToBounds = YES property – Mukesh

+0

Спасибо @muku, но это не решает мою проблему , Мне нужно, чтобы 'UIImage' был правильно масштабирован, а не обрезан –

ответ

0

// искать Line.Hope это поможет вам

«Самый простой способ установить рамку вашего UIImageView и установить contentMode к одному из» The simplest way to resize an UIImage?

+0

Должен ли я изменить его размер? Я полагаю, что установка шкалы в 0.0 на 'UIGraphicsBeginImageContextWithOptions' изменит размер до нужного размера для экрана. –

0

Предполагая, что вы вычисляете метод tabBarFrame в методе viewDidLoad, когда панель вкладок еще не создана, свойство frame даст неверные результаты. Вам нужно перенести свой код в метод viewDidAppear или если вы хотите сделать свой расчет раньше, вы также можете переместить его в viewWillAppear, но сначала вызовите tabBar.layoutIfNeeded()

+0

В моем случае фрейм одинаковый для' viewDidLoad' и 'viewDidAppear'. Кроме того, он работает на iPhone 6 –