ฉันสามารถเปลี่ยนขนาดของ UIActivityIndicator ได้หรือไม่


95

ไม่ว่าฉันจะให้ขนาดเท่าใดก็ตามในขณะที่จัดสรรจะแสดงขนาดคงที่เท่านั้น สามารถเพิ่มได้หรือไม่?

รหัส:

activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:
                     CGRectMake(142.00, 212.00, 80.0, 80.0)];
[[self view] addSubview:activityIndicator];
[activityIndicator sizeToFit];
activityIndicator.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                      UIViewAutoresizingFlexibleRightMargin |
                                      UIViewAutoresizingFlexibleTopMargin |
                                      UIViewAutoresizingFlexibleBottomMargin);
activityIndicator.hidesWhenStopped = YES;
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;

1
Check
this

คำตอบ:


51

ขนาดได้รับการแก้ไขตามสไตล์ มันเป็นองค์ประกอบอินเทอร์เฟซที่เป็นมาตรฐานดังนั้น API จึงไม่ชอบที่จะยุ่งกับมัน

อย่างไรก็ตามคุณอาจทำการเปลี่ยนแปลงการปรับขนาดได้ อย่างไรก็ตามไม่แน่ใจว่าจะส่งผลต่อภาพอย่างไร

จากมุมมองของการออกแบบ UI มักจะดีกว่าที่จะปล่อยให้องค์ประกอบมาตรฐานทั่วไปเหล่านี้อยู่คนเดียว ผู้ใช้ได้รับการสอนว่าองค์ประกอบบางอย่างปรากฏในขนาดที่แน่นอนและหมายถึงสิ่งที่เฉพาะเจาะจง การเปลี่ยนรูปลักษณ์มาตรฐานจะเปลี่ยนไวยากรณ์ของอินเทอร์เฟซและทำให้ผู้ใช้สับสน


14
ยอดเยี่ยมในบางบริบท อย่างไรก็ตามจะเกิดอะไรขึ้นถ้าสิ่งนี้อยู่ในหน้าจอสแปลชและสิ่งที่คุณเห็นคือโลโก้และบางทีสปินเนอร์ตัวเล็ก ๆ ที่อยู่ตรงกลางหน้าจอมันก็ดูงี่เง่าไปหน่อย ฉันไม่อยากจะเชื่อเลยว่า Apple คิดว่า one-size-fits-all เป็นแนวคิดในองค์ประกอบ UI ด้วยซ้ำ
Ben Leggiero

6
@ BenLeggiero คุณไม่ได้พูดถึงUIActivityIndicatorViewStyleWhiteLargeแต่เกี่ยวกับขนาดเล็กแทนใช่มั้ย? เพราะฉันคิดว่าLargeเวอร์ชันนี้มีขนาดที่ดีแม้บนหน้าจอว่างเปล่า
เรื่องความหมาย

2
.whiteLargeทำมัน! ขอบคุณ! ฉันยังตั้งค่าUIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))และactivityIndicator.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.38). บนหน้าจอ 6 + /
7+

1
มันจะดูพร่ามัวหากคุณทำการแปลงสเกลเพื่อเพิ่มขนาด
Gandalf458

165

สิ่งต่อไปนี้จะสร้างตัวบ่งชี้กิจกรรมกว้าง 15px:

#import <QuartzCore/QuartzCore.h>

...

UIActivityIndicatorView *activityIndicator = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
activityIndicator.transform = CGAffineTransformMakeScale(0.75, 0.75);
[self addSubview:activityIndicator];

ในขณะที่ฉันเข้าใจความรู้สึกของคำตอบของ TechZen แต่ฉันไม่คิดว่าการปรับขนาดของ UIActivityIndicator ด้วยจำนวนที่ค่อนข้างน้อยถือเป็นการละเมิดสำนวนอินเทอร์เฟซมาตรฐานของ Apple ไม่ว่าตัวบ่งชี้กิจกรรมจะเป็น 20px หรือ 15px จะไม่เปลี่ยนการตีความของผู้ใช้ ว่าเกิดอะไรขึ้น


1
และตัวบ่งชี้กิจกรรมมีขนาดเล็กเกินไปบน iPad โดยมีหนึ่งตัวอยู่ตรงกลางของ webView ...
hokkuk

4
ดูเหมือนว่าจะขยายขนาดพิกเซลจึงไม่สามารถยอมรับได้สำหรับจำนวนมาก แต่น่าเสียดาย
prewett

72

Swift 3.0 และ Swift 4.0

self.activityIndi.transform = CGAffineTransform(scaleX: 3, y: 3)

3
สิ่งที่ฉันต้องการ นี่น่าจะเป็นคำตอบอันดับต้น ๆ
nocdib

ฉันชอบวิธีแก้ปัญหาแบบบรรทัดเดียวสำหรับเรื่องง่ายๆ! ตอนนี้ปัญหาเดียวคือวิธีต่อต้านนามแฝง Apple TV มีขนาดที่ใหญ่กว่าถึงสองเท่า
Michele Dall'Agata

@ MicheleDall'Agata ยังไม่มีโซลูชันเนทีฟใด ๆ สำหรับแถบความคืบหน้ากราฟิกคุณภาพดีใน iOS หากคุณต้องการปรับแต่งให้ดีกว่าที่เป็นอยู่ แต่ฉันขอแนะนำให้ใช้ bcoz ดั้งเดิมของขนาดแอปและประสิทธิภาพของแอป
Harshil Kotecha

@HarshilKotecha ที่จริงฉันได้พบในภายหลังว่า (อย่างน้อยสำหรับ tvOS) ใน IB มีรูปแบบสำหรับอุปกรณ์กิจกรรมที่เรียกว่า "Large White" อันนั้นมีสัดส่วนสองเท่าของสัดส่วนปกติซึ่งเป็นสิ่งที่ฉันตั้งเป้าไว้ ขาประจำมีขนาดเล็กเกินไปอาจจะดีสำหรับเซลล์เดียว
Michele Dall'Agata

45

เป็นไปได้ที่จะปรับขนาด UIActivityIndicator

CGAffineTransform transform = CGAffineTransformMakeScale(1.5f, 1.5f);
activityIndicator.transform = transform;

ขนาดต้นฉบับคือ 1.0f. ตอนนี้คุณเพิ่มและลดขนาดตาม


3
let transform = CGAffineTransformMakeScale(1.5, 1.5) activityIndicator.transform = transform
Rohit Funde

11

สวิฟท์ 3

 var activityIndicator = UIActivityIndicatorView()
    activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)
    activityIndicator.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
    let transform: CGAffineTransform = CGAffineTransform(scaleX: 1.5, y: 1.5)
    activityIndicator.transform = transform
    activityIndicator.center = self.view.center
    activityIndicator.startAnimating()
    self.view.addSubview(activityIndicator)

3

นี่คือส่วนขยายที่ใช้งานได้กับSwift 3.0และการตรวจสอบเพื่อป้องกันการปรับ 0 (หรือค่าใดก็ตามที่คุณต้องการห้าม)

extension UIActivityIndicatorView {
    func scale(factor: CGFloat) {
        guard factor > 0.0 else { return }

        transform = CGAffineTransform(scaleX: factor, y: factor)
    }
}

เรียกแบบนั้นเพื่อปรับขนาดเป็น 40 pts (2x):

activityIndicatorView.scale(factor: 2.0)

2

นอกจากนี้ยังมีเทคนิค "CGAffineTransform" ที่มีประโยชน์อื่น ๆ อีกมากมายที่คุณสามารถเล่นได้ สำหรับรายละเอียดเพิ่มเติมโปรดดูข้อมูลอ้างอิงของ Apple Developer Library:

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html

โชคดี!


1

สิ่งที่ดีที่สุดที่คุณทำได้คือใช้whiteLargeสไตล์ let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge).

การเพิ่มขนาดUIActivityIndicatorViewไม่ได้ทำให้ขนาดของตัวบ่งชี้ถูกต้องตามที่เห็นในภาพเหล่านี้ตัวบ่งชี้ขนาดเล็ก ตัวบ่งชี้ "ใหญ่"


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.