web-dev-qa-db-ja.com

画面中央にUIActivityIndi​​catorViewが表示されます

NetworkActivityIndi​​catorをミラーリングするためにUIActivityIndi​​catorViewを画面の中央に表示する方法はありますか?そのため、NetworkActivityIndi​​catorと同じプロセスが必要ですが、ユーザーにとってより目立つようにインジケーターが大きくなっています。

16
Indy

これを試して:

_UIView *view = /* whatever your main view is */
UIActivityIndicatorView *spinner = [[UIActivityIndicatorVIew alloc] 
            initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
CGRect frame = spinner.frame;
frame.Origin.x = view.frame.size.width / 2 - frame.size.width / 2;
frame.Origin.y = view.frame.size.height / 2 - frame.size.height / 2;
spinner.frame = frame;
[view addSubview:spinner];
[spinner startAnimating];
[spinner release]; // Or, you could keep a handle to this for later to stop animating it
_

これは基本的に、スピナーを囲んでいるビューの中央に配置します。

スピナーへのハンドルを保持しておらず、スピナーがビューの唯一のサブビューである場合(または少なくともよく知られた位置にある場合)、後で_[view subviews]_に浸すことでハンドルを取得できます。

編集:xy...を見つけるために、上記のより複雑な方程式の代わりにCGRectGetMidX()CGRectGetMidY()を使用することもできます...異なります。 :-)

[〜#〜]編集[〜#〜](2016年2月25日)

この回答は最近いくつかの賛成票を受け取ったので、更新が必要だと思いました。実際、これを行うにはさらに良い方法があります。この例では、UIActivityIndicatorViewUITableViewの中央に配置します。

_self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
_spinner.translatesAutoresizingMaskIntoConstraints = NO;
_spinner.hidesWhenStopped = YES;
[self.tableView addSubview:self.spinner];

[self.tableView addConstraints:@[
                                 [NSLayoutConstraint constraintWithItem:_spinner
                                                              attribute:NSLayoutAttributeCenterX
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.tableView
                                                              attribute:NSLayoutAttributeCenterX
                                                             multiplier:1 constant:0],
                                 [NSLayoutConstraint constraintWithItem:_spinner
                                                              attribute:NSLayoutAttributeCenterY
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.tableView
                                                              attribute:NSLayoutAttributeCenterY
                                                             multiplier:1 constant:0]
                                 ]];
_
27
Mark Granoff

これは、UIViewController内で機能します。

override func viewDidLayoutSubviews() {
    activityIndicator.center = view.center
}
22
csch
indicatorView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
indicatorView.center = self.view.center;
9
Bkillnest
activityInd.center = CGPointMake(160,240);
3
Hetal Vora

Swiftの場合:

var activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)

override func viewDidLoad() {
    activityIndicator.hidesWhenStopped = true;
    activityIndicator.activityIndicatorViewStyle  = UIActivityIndicatorViewStyle.Gray;
    activityIndicator.center = view.center;
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

詳細については、以下のチュートリアルを参照してください。

http://sourcefreeze.com/uiactivityindicatorview-example-using-Swift-in-ios/

1
Ramkumar
-(void)setCenter:(UIView*)view{
UIActivityIndicatorView *actView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[view addSubview:actView];
[actView startAnimating];
CGSize boundsSize = view.bounds.size;
CGRect frameToCenter = actView.frame;
// center horizontally
if (frameToCenter.size.width < boundsSize.width)
    frameToCenter.Origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
else
    frameToCenter.Origin.x = 0;

// center vertically
if (frameToCenter.size.height < boundsSize.height)
    frameToCenter.Origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
else
    frameToCenter.Origin.y = 0;

actView.frame = frameToCenter;

}

1
SachinVsSachin

in Swift 2.0 xcode 7:

 override func viewDidLayoutSubviews() {
    self.Loader.center = self.view.center
 }
0
Pablo Ruan

これは私のために働いた。フレームではなく境界を使用していることに注意してください。フレームは、向きに基づいて常にrectを表示するとは限りません(このメソッドはView Controllerの内部に入ります)。

- (void) viewDidLayoutSubviews
{
    if (self.spinner)
    {
        CGRect screenRect = self.view.bounds;

        self.spinner.frame = CGRectMake(roundf((screenRect.size.width - 50) * 0.5f),
                                        roundf((screenRect.size.height - 50) * 0.5f),
                                        50,
                                        50);
    }
}
0
Allen S

これだけが私にぴったりで、シンプルで高速です。

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 

spinner.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);

[self.view addSubview:spinner]; 
[spinner startAnimating];
0
Matheus Veloza