NetworkActivityIndicatorをミラーリングするためにUIActivityIndicatorViewを画面の中央に表示する方法はありますか?そのため、NetworkActivityIndicatorと同じプロセスが必要ですが、ユーザーにとってより目立つようにインジケーターが大きくなっています。
これを試して:
_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]
_に浸すことでハンドルを取得できます。
編集:x
とy
...を見つけるために、上記のより複雑な方程式の代わりにCGRectGetMidX()
とCGRectGetMidY()
を使用することもできます...異なります。 :-)
[〜#〜]編集[〜#〜](2016年2月25日)
この回答は最近いくつかの賛成票を受け取ったので、更新が必要だと思いました。実際、これを行うにはさらに良い方法があります。この例では、UIActivityIndicatorView
をUITableView
の中央に配置します。
_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]
]];
_
これは、UIViewController内で機能します。
override func viewDidLayoutSubviews() {
activityIndicator.center = view.center
}
indicatorView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
indicatorView.center = self.view.center;
activityInd.center = CGPointMake(160,240);
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/
-(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;
}
in Swift 2.0 xcode 7:
override func viewDidLayoutSubviews() {
self.Loader.center = self.view.center
}
これは私のために働いた。フレームではなく境界を使用していることに注意してください。フレームは、向きに基づいて常に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);
}
}
これだけが私にぴったりで、シンプルで高速です。
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];