Rotate UIBarButtonItem

2020-03-25 16:50发布

I want to rotate a UIBarButtonItem.

I have been able to do this with UIButtons using setTransform:CGAffineTransformMakeRotation(…), but UIBarButtonItem does not have this property.

I know the Camera-app does this, so it should be achieveable.
How can I achieve this?

Thanks.

4条回答
可以哭但决不认输i
2楼-- · 2020-03-25 16:56

You could put a UIButton inside a Bar Button Item, than rotate the UIButton.

查看更多
闹够了就滚
3楼-- · 2020-03-25 16:59

Have you tried using a custom view inside the UIBarButtonItem that you then transform any way you want?

查看更多
Viruses.
4楼-- · 2020-03-25 17:12

I extended UIToolBar, giving access to its subviews, and in it have a function rotate that rotates the buttons in the opposite direction of the bar:

- (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));
    }

} 
查看更多
贪生不怕死
5楼-- · 2020-03-25 17:20

UIBarButtonItem does not extend UIView, so it cannot be transformed directly. You can add the UIBarButtonItem you wish to transform to a UIToolbar, transform the UIToolbar and then add the toolbar as a custom view to another UIBarButtonItem. This item can then be set as a navigation item or added to another UIToolbar. However, if you are using a custom view or image then Emil's approach in the comment above is best.

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;
查看更多
登录 后发表回答