0

我正在初始化一个加载器子视图以匹配我用来包装我的应用程序的 UITabBar 的高度、宽度和位置:

// In UITabBarController implementation

LoaderView *loaderView = [[LoaderView alloc] initWithFrame:[self tabBar].viewForBaselineLayout.frame];
[[self view] addSubview:loaderView];

//
//  LoaderView.h

#import <UIKit/UIKit.h>

@interface LoaderView : UIView

@property (nonatomic, strong) UILabel *messageLabel;
@property (nonatomic, strong) NSString *message;
@property (nonatomic) CGRect frame;

- (void)createLabel;
- (void)drawLoader;
- (void)setText:(NSString *)newMessage;
- (void)show:(NSNotification *)notification;

@end

//
//  LoaderView.m

#import "LoaderView.h"

@implementation LoaderView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self drawLoader];
    }
    return self;
}

- (void)drawLoader
{
    UIColor *semiOpaqueGray = [[UIColor alloc] initWithRed:0.0f green:0.0f blue:0.0f alpha:0.8f];
    [self setBackgroundColor:semiOpaqueGray];

    [self createLabel];
}

- (void)createLabel
{
    _messageLabel = [[UILabel alloc] initWithFrame: CGRectMake(15,9,([self frame].size.width - 10), 30)];
    _messageLabel.textColor = [[UIColor alloc] initWithWhite:1.0 alpha:1];
    _messageLabel.backgroundColor = [[UIColor alloc] initWithWhite:1.0 alpha:0.0];

    [self addSubview:_messageLabel];
}

@end

frame结构表示这个传入的帧数据:

2013-09-16 07:48:35.552 ---[97825:a0b] {{0, 519}, {320, 49}}
// Ostensibly 0,519 origin point and 320,49 w/h

结果是这样的。可以在左上角发现大部分不透明的暗盒。看起来它被加载器的中心点定位到屏幕的左上角:

放错位置的灰盒截图

我可以改变盒子的大小,但我似乎无法从左上角移动它。此外,我在其上设置了一个动画,该动画会调整框架(从标签栏区域向上和向下滑动)。这似乎也没有效果。

在此先感谢您的帮助。

4

2 回答 2

1

您可以轻轻地将您的 loadingView 添加到您的应用程序窗口中。设置好loaderView的frame之后。

[loadView setFrame:CGRectMake(0,0,self.frame.size.width.,self.frame.size.height)];
[self.window addSubview:loaderView];

然后加载完成后。

[self.window removeSubview:loaderView];
于 2013-09-25T21:05:04.287 回答
0

你的superview是问题所在。如果您将其添加到 UINavigationController 中,则 y 轴可能不会很好地响应。尝试使用控制器的主视图

loaderView.frame = CGRectMake(x, 514, 40, 320);  // made up numbers
[self.mapView addSubview:loaderView];

此外,您正在访问您的 tabBar。尝试使用 UIDevice 窗口获取宽度并从底部标签继承高度(或将标签嵌套在 LoaderView 中)

还要研究实际使用 UITabBar 来处理这个问题。

于 2013-09-20T06:12:37.103 回答