Как разместить изображение профиля на uibarbuttonitem с закругленными углами в объективе c?

Я хочу сделать свой UIbarbuttonItem с закругленными углами (справа). Я ссылался на ссылку для реализации, но я не получаю. Изображение приходит из URL.Мой код,

 dispatch_async(dispatch_get_global_queue(0,0), ^{

 NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL   URLWithString:userImage]];
    if ( data == nil )
        return;
    dispatch_async(dispatch_get_main_queue(), ^{
        // WARNING: is the cell still using the same data by this point??
        UIImage *img = [UIImage imageWithData: data];

        UIImage *btnImage = [self imageWithImage:img scaledToSize:CGSizeMake(50, 50)];
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        // btn.bounds = CGRectMake( 0, 0, btnImage.size.width, btnImage.size.height );
        [btn addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchDown];
        [btn setImage:btnImage forState:UIControlStateNormal];
        UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
        self.navigationItem.rightBarButtonItem = btnItem;
    });

});

введите описание изображения здесьМне нужно реализовать то же, что и изображение. Что я делаю неправильно, пожалуйста, помогите мне чтобы исправить это.


person iniyaniOS    schedule 08.07.2015    source источник


Ответы (3)


Меня устраивает:

- (void)viewDidLoad
 {
 [super viewDidLoad];
  NSString* url = @"http://i.stack.imgur.com/EbYBY.jpg";
 NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL   URLWithString:url]];
UIImage* img = [UIImage imageWithData:data];

UIImageView* v = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
v.image = img;
v.layer.masksToBounds = YES;
v.layer.cornerRadius = 20;

UIBarButtonItem* rightBtn = [[UIBarButtonItem alloc] initWithCustomView:v];
self.navigationItem.rightBarButtonItem = rightBtn;
}

введите здесь описание изображения

person oxigen    schedule 08.07.2015
comment
Странный. Как видно на скриншоте - код работает. Возможно, проблема в вашем NavigationItem... Можете ли вы добавить к нему любой другой элемент rightButtonItem? - person oxigen; 08.07.2015
comment
Я не уверен, что я делаю неправильно. Я использовал тот же код на другом контроллере просмотра, я столкнулся с той же проблемой. Можете ли вы предложить какое-то решение - person iniyaniOS; 08.07.2015
comment
1. проверьте self.navigationItem , возможно, он имеет неправильный размер или равен нулю. 2. Попробуйте добавить простой rightItem (только текст, без изображения) - person oxigen; 08.07.2015
comment
Я пытаюсь создать панель навигации программно с помощью UIbarbuttonItem, она работает нормально. Но я размещаю UInavigationabar с пользовательским интерфейсом, этот код не работает - person iniyaniOS; 08.07.2015

Вот ответ oxigen (отлично), преобразованный в Swift 3/Swift 4:

override func viewDidLoad()
{
    super.viewDidLoad()

    let url = URL(string: "http://i.stack.imgur.com/EbYBY.jpg")!
    let data = try! Data(contentsOf: url)
    let img = UIImage(data: data)
    let imageView = UIImageView(frame: CGRect(x: 0.0, y: 0.0, width: 40.0, height: 40.0))
    imageView.image = img?.withRenderingMode(.alwaysOriginal)
    imageView.layer.cornerRadius = 20.0
    imageView.layer.masksToBounds = true
    let barButton = UIBarButtonItem(customView: imageView)
    navigationItem.setLeftBarButton(barButton, animated: false)
}

(Данный URL-адрес уже мертв, но с правильным URL-адресом или другим изображением код должен работать.)

person brookinc    schedule 10.11.2017

Вы можете сделать кнопку круглой, используя это

UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0,0,100,100)//set your frame's size
[btn setImage:[UIImage imageNamed:btnImage]  forState:UIControlStateNormal];  
btn.layer.masksToBounds = NO;
btn.layer.cornerRadius = btn.bounds.size.width/2;;

UIBarButtonItem * btnItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
[self.navigationItem setRightBarButtonItems:@[btnItem]];
person Munahil    schedule 08.07.2015
comment
Но я не получаю само изображение - person iniyaniOS; 08.07.2015
comment
Вы уверены, что изображение исходит из URL-адреса? - person Munahil; 08.07.2015
comment
Да, я получаю изображение с URL. - person iniyaniOS; 08.07.2015
comment
Поместите его в другое изображение или другую кнопку и проверьте, отображается ли оно. Чтобы вы могли быть уверены, что изображение не отображается только в UIBarButtonItem - person Munahil; 08.07.2015
comment
да, я сделал то же самое. Изображение отображается в изображении. Только с UIbarbuttonItem это не работает - person iniyaniOS; 08.07.2015
comment
Удалите сборку с вашего симулятора/устройства. Очистите эту сборку, а затем запустите и посмотрите. Также проверьте, отображается ли UIBarButtonItem без изображения? - person Munahil; 08.07.2015
comment
Я использую два XIB, есть ли с этим проблемы? - person iniyaniOS; 08.07.2015
comment
Давайте продолжим это обсуждение в чате. - person Munahil; 08.07.2015
comment
Поздравляю.. Что ты сделал? - person Munahil; 08.07.2015
comment
Создан экземпляр для элемента навигации - person iniyaniOS; 08.07.2015
comment
Правильно.. Всего наилучшего :) - person Munahil; 08.07.2015