UIButtonのパッケージ
6172 ワード
開発ではbuttonの様々なスタイルをよく見ていますが、多重性の高いコードに対しては、それをカプセル化する必要があります.buttonには2つのコントロールtitleLabelとimageViewがありますが、この2つのコントロールの位置を変更するにはUIButtonの2つのプロパティ:setImageEdgeInsetsとsettitleEdgeInsetsを簡単に理解する必要があります.
デフォルトでは、画像は左側、テキストは右側に中央に表示されます.それらの位置も自分にとってbuttonの位置の大きさとは関係ありません.
よく使われるので、画像のテキストに対する位置に基づいてパッケージ化されています.は、画像またはテキストに適応するために、BooLタイプの_を設定する.AutoSize判断. は、画像とテキストとの相対的な位置と、画像とテキストとを全体として上下左右にずらす を設ける.以下は、デフォルトのピクチャとテキストの位置であり、その後、全体としてのオフセット位置 とする.
– (void)layoutBtnSubviews{ CGSize imageSize = self.currentImage.size; CGSize titleSize = [self.titleLabel getSize];
具体的なコードについては、以下を参照してください.https://github.com/MayerFeng/SimpleNavDemo
デフォルトでは、画像は左側、テキストは右側に中央に表示されます.それらの位置も自分にとってbuttonの位置の大きさとは関係ありません.
// ,
[btn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[btn setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
よく使われるので、画像のテキストに対する位置に基づいてパッケージ化されています.
– (void)layoutBtnSubviews{ CGSize imageSize = self.currentImage.size; CGSize titleSize = [self.titleLabel getSize];
CGFloat maxWidth = (imageSize.width > titleSize.width) ? imageSize.width : titleSize.width;
CGFloat maxHeight = (imageSize.height > titleSize.height) ? imageSize.height : titleSize.height;
CGRect tempFrame = self.frame;
CGFloat autoWidth = self.frame.size.width;
CGFloat autoHeight = self.frame.size.height;
switch (self.imageStyle)
{
case MMBtnImageStyleDefault: //
{
switch (self.layoutStyle) //
{
case MMBtnLayoutStyleNone:
{
self.minSize = CGSizeMake(imageSize.width + titleSize.width + _space, maxHeight);
if (_autoSize) //
{
autoWidth = imageSize.width + titleSize.width + _space;
if (_minWidth > autoWidth)
{
autoWidth = _minWidth;
}
autoHeight = maxHeight;
if (_minHeight > autoHeight)
{
autoHeight = _minHeight;
}
}
[self setTitleEdgeInsets:UIEdgeInsetsMake(0, _space / 2.0, 0, -_space / 2.0)];
[self setImageEdgeInsets:UIEdgeInsetsMake(0, -_space / 2.0, 0, _space / 2.0)];
}
break;
case MMBtnLayoutStyleLeft:
{
self.minSize = CGSizeMake(imageSize.width + titleSize.width + _space + _offsetMargin, maxHeight);
if (_autoSize)
{
autoWidth = imageSize.width + titleSize.width + _space + _offsetMargin;
if (_minWidth > autoWidth)
{
autoWidth = _minWidth;
}
autoHeight = maxHeight;
if (_minHeight > autoHeight)
{
autoHeight = _minHeight;
}
}
CGFloat offsetX = (autoWidth - titleSize.width - imageSize.width) / 2.0 - _offsetMargin;
[self setTitleEdgeInsets:UIEdgeInsetsMake(0, -offsetX + _space, 0, offsetX - _space)];
[self setImageEdgeInsets:UIEdgeInsetsMake(0, -offsetX, 0, offsetX)];
}
break;
case MMBtnLayoutStyleRight:
{
self.minSize = CGSizeMake(imageSize.width + titleSize.width + _space + _offsetMargin, maxHeight);
if (_autoSize)
{
autoWidth = imageSize.width + titleSize.width + _space + _offsetMargin;
if (_minWidth > autoWidth)
{
autoWidth = _minWidth;
}
autoHeight = maxHeight;
if (_minHeight > autoHeight)
{
autoHeight = _minHeight;
}
}
CGFloat offsetX = - ((autoWidth - titleSize.width - imageSize.width) / 2.0 - _offsetMargin);
[self setTitleEdgeInsets:UIEdgeInsetsMake(0, -offsetX, 0, offsetX)];
[self setImageEdgeInsets:UIEdgeInsetsMake(0, -offsetX - _space, 0, offsetX + _space)];
}
break;
case MMBtnLayoutStyleTop:
{
self.minSize = CGSizeMake(imageSize.width + titleSize.width + _space, maxHeight + _offsetMargin);
if (_autoSize)
{
autoWidth = imageSize.width + titleSize.width + _space;
if (_minWidth > autoWidth)
{
autoWidth = _minWidth;
}
autoHeight = maxHeight + _offsetMargin;
if (_minHeight > autoHeight)
{
autoHeight = _minHeight;
}
}
CGFloat offsetY = (autoHeight - maxHeight) / 2.0 - _offsetMargin;
[self setTitleEdgeInsets:UIEdgeInsetsMake(-offsetY , _space / 2.0, offsetY, -_space / 2.0)];
[self setImageEdgeInsets:UIEdgeInsetsMake(-offsetY, -_space / 2.0, offsetY, _space / 2.0)];
}
break;
case MMBtnLayoutStyleBottom:
{
self.minSize = CGSizeMake(imageSize.width + titleSize.width + _space, maxHeight + _offsetMargin);
if (_autoSize)
{
autoWidth = imageSize.width + titleSize.width + _space;
if (_minWidth > autoWidth)
{
autoWidth = _minWidth;
}
autoHeight = maxHeight + _offsetMargin;
if (_minHeight > autoHeight)
{
autoHeight = _minHeight;
}
}
CGFloat offsetY = -((autoHeight - maxHeight) / 2.0 - _offsetMargin);
[self setTitleEdgeInsets:UIEdgeInsetsMake(-offsetY , _space / 2.0, offsetY, -_space / 2.0)];
[self setImageEdgeInsets:UIEdgeInsetsMake(-offsetY, -_space / 2.0, offsetY, _space / 2.0)];
}
break;
}
}
break;
具体的なコードについては、以下を参照してください.https://github.com/MayerFeng/SimpleNavDemo