การใช้คลาส UIPopoverBackgroundView

Apple ไม่มีเอกสารเกี่ยวกับวิธีการใช้คลาส UIPopoverBackgroundView ที่แนะนำใน iOS5 ใครมีตัวอย่างบ้าง?

ฉันได้ลองคลาสย่อยแล้ว แต่ XCode 4.2 ของฉันบน Lion หายไป UIPopoverBackgroundView.h

แก้ไข: ไม่น่าแปลกใจเลยที่ควรจะนำเข้าเป็น #import <UIKit/UIPopoverBackgroundView.h>


person Andrew Kolesnikov    schedule 20.11.2011    source แหล่งที่มา
comment
คุณแน่ใจหรือว่าไม่พบเอกสาร: developer.apple.com/library/IOs/#documentation/UIKit/Reference/   -  person CodaFi    schedule 21.11.2011
comment
CodaFI ตอบแล้วเกี่ยวกับเอกสารประกอบ...เรื่องอื่นคือตัวอย่างนี้ blog.brandoncopley.com/?p= 72 โชคดีนะ   -  person silvaric    schedule 22.11.2011
comment
อาจดู SDK ผิดหรือเปล่า   -  person Constantino Tsarouhas    schedule 22.11.2011
comment
ขอบคุณสำหรับ #import ‹UIKit/UIPopoverBackgroundView.h› :)   -  person Cesar    schedule 02.01.2012
comment
นี่คือบทช่วยสอน   -  person Andrew Kolesnikov    schedule 12.04.2012


คำตอบ (2)


หากต้องการเพิ่มคำตอบอื่น ๆ เฉพาะลิงก์ นี่คือวิธีการ

  • สร้างคลาสย่อยใหม่ของ UIPopoverBackgroundView
  • ประกาศสิ่งต่อไปนี้ในอินเทอร์เฟซของคุณ:

    +(UIEdgeInsets)contentViewInsets;
    +(CGFloat)arrowHeight;
    +(CGFloat)arrowBase;
    
    @property(nonatomic,readwrite) CGFloat arrowOffset;
    @property(nonatomic,readwrite) UIPopoverArrowDirection arrowDirection;
    
  • วิธีการเรียนนั้นตรงไปตรงมา: contentViewInsets ส่งกลับความกว้างของเส้นขอบของคุณตลอดทาง (ไม่รวมลูกศร), arrowHeight คือความสูงของลูกศรของคุณ, arrowBase คือฐานของลูกศรของคุณ

  • ใช้ตัวตั้งค่าคุณสมบัติทั้งสอง อย่าลืมโทร [self setNeedsLayout]
  • ในวิธีการเริ่มต้นของคุณ ให้สร้างมุมมองรูปภาพสองมุมมอง โดยมุมมองหนึ่งถือลูกศรของคุณ (ซึ่งควรเป็นขนาดของขนาดของลูกศรในวิธีการเรียนของคุณ) และอีกมุมมองหนึ่งถือภาพพื้นหลังของคุณ (ซึ่งจะต้องเป็นภาพที่ปรับขนาดได้) และเพิ่มสิ่งเหล่านี้เป็นมุมมองย่อย ไม่สำคัญว่าคุณจะวางมุมมองย่อยไว้ที่จุดใด เนื่องจากคุณไม่มีทิศทางหรือออฟเซ็ตของลูกศร คุณควรตรวจสอบให้แน่ใจว่ามุมมองรูปภาพลูกศรอยู่เหนือมุมมองภาพพื้นหลังเพื่อให้กลมกลืนกันอย่างเหมาะสม
  • Implement layoutSubviews. In here, according to the arrowDirection and arrowOffset properties, you have to adjust the frames of your background view and arrow view.
    • The frame of your background view should be self.bounds, inset by arrowHeight on whatever edge the arrow is on
    • กรอบของมุมมองลูกศรควรอยู่ในแนวเดียวกันเพื่อให้ศูนย์กลางอยู่ห่างจากศูนย์กลางของ arrowOffset arrowOffset (ถูกต้องตามแกน) คุณต้องเปลี่ยนการวางแนวของภาพหากทิศทางลูกศรไม่ขึ้น แต่ป๊อปโอเวอร์ของฉันจะขึ้นเท่านั้น ดังนั้นฉันจึงไม่ได้ทำอย่างนั้น

นี่คือวิธี layoutSubviews สำหรับคลาสย่อย Up-only ของฉัน:

-(void)layoutSubviews
{
    if (self.arrowDirection == UIPopoverArrowDirectionUp)
    {
        CGFloat height = [[self class] arrowHeight];
        CGFloat base = [[self class] arrowBase];

        self.background.frame = CGRectMake(0, height, self.frame.size.width, self.frame.size.height - height);

        self.arrow.frame = CGRectMake(self.frame.size.width * 0.5 + self.arrowOffset - base * 0.5, 1.0, base, height);
        [self bringSubviewToFront:self.arrow];

    }
}
person jrturton    schedule 07.09.2012

ลิงก์อื่นตอบเท่านั้น แต่การปรับแต่ง UIPopoverBackgroundView นั้นใช้งานได้มากกว่าที่คุณอาจทราบเนื่องจากมีเอกสารที่จำกัด และโครงการ GitHub นี้มีตัวอย่างการทำงานที่สมบูรณ์ซึ่งช่วยฉันประหยัดเวลาได้มาก: https://github.com/GiK/GIKPopoverBackgroundView

ค่อนข้างตรงไปตรงมาที่จะเข้าร่วมโครงการของคุณเอง ส่วนที่ยุ่งยากที่สุดคือการปรับส่วนแทรกของฝาครอบสำหรับรูปภาพที่กำหนดเองที่คุณใช้ ฉันขอแนะนำให้ทำการปรับแต่งแบบ in-situ ในโปรเจ็กต์ และเนื่องจากเป็นเรื่องง่ายที่จะตรวจสอบกรณีการใช้งานการวางแนว/ทิศทางของป๊อปโอเวอร์ที่แสดงอย่างถูกต้องในเครื่องจำลองก่อนที่จะย้ายไปยังโปรเจ็กต์ของคุณเอง

person user2067021    schedule 12.11.2015