2012-03-14 2 views
5

У меня есть пользовательский UIButton следующим образом:UIButton с фиксированного размера пользовательского образа

UIButton * action = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [action setSize:CGSizeMake(30, 30)]; 
    [action setBackgroundImage:[UIImage imageNamed:@"contextaction.png"] forState:UIControlStateNormal]; 
    [action setContentMode:UIViewContentModeCenter]; 
    [action addTarget:self action:@selector(actionButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

Реальное изображение, которое у меня есть на самом деле размером в 10х10, по центру, и я хочу, чтобы оставаться таким образом и не масштабируется до размер кнопки. Как мне это сделать?

REVISED КОД:

UIButton * action = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [action setSize:CGSizeMake(44, 44)]; 
    [action setImage:[UIImage imageNamed:@"contextaction.png"] forState:UIControlStateNormal]; 
    [action addTarget:self action:@selector(actionButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

    if (IS_IPAD){ 
     action.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; 
     action.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
    } 
    actionButton_ = [[UIBarButtonItem alloc] initWithCustomView:action]; 

, который до сих пор масштабировании

ответ

1

Может быть попробовать что-то liky это ...

[button addSubview:imageView]; 

где ImageView содержит изображение;

2

Используйте setImage:forState: метод UIButton вместо setBackgroundImage:forState:

UIButton наследует от UIControl, так что вы можете установить contentHorizontalAlignment и contentVerticalAlignment свойства UIControlContentHorizontalAlignmentCenter и UIControlContentVerticalAlignmentCenter соответственно (хотя в большинстве случаев это уже значения по умолчанию).

+0

я изменил в использовании setImage, как я установил contentHorizontalAlignment – adit

+0

Это еще масштабирования по размеру UIButton – adit

0

использования setContentMode

[action setContentMode:UIViewContentModeCenter]; 
0

Включать рамки QuartzCore и изменение силы тяжести на слое.

action.layer.contentsGravity=kCAGravityCenter; 
1

Работа пример для Swift 3 надеюсь, что это помогает

import UIKit 

@IBDesignable 
class MenuBtn: UIButton { 

    convenience init() { 
     self.init(frame: CGRect.zero) 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setupView() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     setupView() 
    } 

    func setupView(){ 
     imageView?.contentMode = .scaleAspectFit 
     var image = imageView?.image 
     image = image?.withRenderingMode(.alwaysTemplate) 

    } 

    override var isSelected: Bool { 
     didSet { 
      tintColor = super.isSelected ? .gray : .gray 
     } 
    } 

    override func imageRect(forContentRect contentRect: CGRect) -> CGRect { 
     let leftMargin:CGFloat = 40 
     let imgWidth:CGFloat = 24 
     let imgHeight:CGFloat = 24 
     return CGRect(x: leftMargin, y: (contentRect.size.height-imgHeight) * 0.5, width: imgWidth, height: imgHeight) 
    } 

    override func titleRect(forContentRect contentRect: CGRect) -> CGRect { 
     let leftMargin:CGFloat = 80 
     let rightMargin:CGFloat = 80 
     return CGRect(x: leftMargin, y: 0, width: contentRect.size.width-leftMargin-rightMargin, height: contentRect.size.height) 
    } 

    override func backgroundRect(forBounds bounds: CGRect) -> CGRect { 
     let leftMargin:CGFloat = 10 
     let rightMargin:CGFloat = 10 
     let topMargin:CGFloat = 10 
     let bottomMargin:CGFloat = 10 
     return CGRect(x: leftMargin, y: topMargin, width: bounds.size.width-leftMargin-rightMargin, height: bounds.size.height-topMargin-bottomMargin) 
    } 


    override func contentRect(forBounds bounds: CGRect) -> CGRect { 
     let leftMargin:CGFloat = 5 
     let rightMargin:CGFloat = 5 
     let topMargin:CGFloat = 5 
     let bottomMargin:CGFloat = 5 
     return CGRect(x: leftMargin, y: topMargin, width: bounds.size.width-leftMargin-rightMargin, height: bounds.size.height-topMargin-bottomMargin) 
    } 

    override func prepareForInterfaceBuilder() { 
     super.prepareForInterfaceBuilder() 
     setupView() 
    } 

}