Повернуть UIBarButtonItem


Я хочу повернуть UIBarButtonItem.

Я смог сделать это с помощью UIButtons, используя setTransform:CGAffineTransformMakeRotation(…), но UIBarButtonItem не обладает этим свойством.

Я знаю, что приложение-камера делает это, поэтому это должно быть достижимо.
Как я могу этого достичь?

Спасибо.

4 3

4 ответа:

Вы пробовали использовать пользовательский вид внутри UIBarButtonItem, который затем можно преобразовать любым удобным вам способом?

UIBarButtonItem не расширяет UIView, поэтому он не может быть преобразован непосредственно. Вы можете добавить UIBarButtonItem, который вы хотите преобразовать в UIToolbar, преобразовать UIToolbar, а затем добавить панель инструментов в качестве пользовательского представления в другой UIBarButtonItem. Затем этот элемент можно установить в качестве элемента навигации или добавить в другой UIToolbar. Однако, если вы используете пользовательский вид или изображение, то подход Эмиля в комментарии выше лучше всего.

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(handleForwardItemTouch:)];

UIToolbar *backToolbar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 44, 44)] autorelease];
[backToolbar setTransform:CGAffineTransformMakeScale(-1, 1)];

UIBarButtonItem *backToolbarItem = [[[UIBarButtonItem alloc] initWithCustomView:backToolbar] autorelease];
self.navigationItem.rightBarButtonItem = backToolbarItem;

Вы можете поместить UIButton внутри элемента кнопки панели, чем повернуть UIButton.

Я расширил UIToolBar, дав доступ к его подвидам, и в нем есть Функция rotate, которая вращает кнопки в противоположном направлении от панели:

- (void)rotate: (int)degrees{
    //for the bar
    self.transform=CGAffineTransformMakeRotation(DegreesToRadian(degrees));
    //for the subviews (UIBarButtonItems)
    for (UIView * subView in self.subviews)
    {
        if(!CGRectEqualToRect(subView.bounds, self.bounds))
            subView.transform =   CGAffineTransformMakeRotation(DegreesToRadian(-degrees));
    }

}