2012-02-02 18 views
7

पर पारदर्शी ग्रेडियेंट के साथ UITableView मैंने इस मंच, Google और अन्य मंचों की खोज की है और मुझे अपने विशेष मुद्दे का उत्तर नहीं मिला है।शीर्ष और नीचे

असल में, मेरे पास UIView है जिसमें UITableView है। मैंने इस tutorial का पालन किया और यह आंशिक रूप से सफल रहा। समस्या ढाल है। मेरे पास UITableView के पीछे एक पृष्ठभूमि छवि है। इसलिए जब सेल ढाल के पास है, तो मैं सफेद की बजाय पृष्ठभूमि दिखाना चाहता हूं।

मुझे यह post भी मिला जो मुझे ट्यूटोरियल मिला, लेकिन मै मैट के लिए अपने प्रश्नों के साथ उस पोस्ट को हाइजैक नहीं करना चाहता था।

सही दिशा में कोई भी मदद महान होगी!

EDIT1: मुझे पता है कि मैं पृष्ठभूमि छवि और मध्य कट आउट के साथ एक और छवि का उपयोग कर सकता हूं, लेकिन मैं एक ऐसे समाधान की तलाश में हूं जो संभवतः पीएनजी का उपयोग कर AVOIDS उपयोग करता है।

EDIT2: यहाँ अब मैं क्या मिलता है की एक छवि है:

enter image description here

EDIT3:

हैडर:

@interface MyView : UIViewController { 
    CAGradientLayer *_maskLayer; 
    UITableView *_tableView; 
} 

@property (nonatomic, retain) CAGradientLayer *maskLayer; 
@property (nonatomic, retain) IBOutlet UITableView *tableView;

कार्यान्वयन

यहाँ मेरी कोड है:

@implementation HighScoresView_iPhone 

@synthesize tableView = _tableView; 
@synthesize maskLayer = _maskLayer; 

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    if (![self maskLayer]) { 
     [self setMaskLayer:[CAGradientLayer layer]]; 
     CGColorRef outerColor = [UIColor colorWithWhite:1.0 alpha:1.0].CGColor; 
     CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor; 

     [[self maskLayer] setColors:[NSArray arrayWithObjects: 
            (id)outerColor, 
            (id)innerColor, 
            (id)innerColor, 
            (id)outerColor, 
            nil 
            ] 
     ]; 
     [[self maskLayer] setLocations:[NSArray arrayWithObjects: 
             [NSNumber numberWithFloat:0.0], 
             [NSNumber numberWithFloat:0.2], 
             [NSNumber numberWithFloat:0.8], 
             [NSNumber numberWithFloat:1.0], 
             nil 
             ] 
     ]; 
     [[self maskLayer] setBounds:CGRectMake(0, 0, [[self scoreTableView] frame].size.width, [[self scoreTableView] frame].size.height)]; 
     [[self maskLayer] setAnchorPoint:CGPointZero]; 
     [[[self scoreTableView] layer] addSublayer:[self maskLayer]]; 
    } 
}
+0

यह अनुकूलन कारणों के लिए सुझाव नहीं कर रहा है, लेकिन आप की कोशिश की 'cell.backgroundView.backgroundColor = [UIColor clearColor]' या 'contentView' के लिए एक ही है या 'सेल' के लिए, या इसके कुछ संयोजन के लिए? – bshirley

+0

हाँ, मेरे कोशिकाओं की एक स्पष्ट पृष्ठभूमि है। जब वे केंद्र में होते हैं तो मैं पृष्ठभूमि देख सकता हूं। लेकिन जब वे ऊपर या नीचे के पास होते हैं, तो मैंने जो ट्यूटोरियल बनाया है, उसके बाद मैंने जो ढाल बनाया है, मैं सामग्री को लुप्त करने के बजाए सफेद दिखता हूं। – RoLYroLLs

+0

मैंने यह दिखाने के लिए एक छवि जोड़ा कि यह वर्तमान में कैसा दिखता है। – RoLYroLLs

उत्तर

0

आपके टेबल व्यू के पृष्ठभूमि रंग की तरह लगता है सफेद पर सेट है। पारदर्शी करने के लिए अपने तालिका दृश्य की पृष्ठभूमि सेट करके देखें:

tableView.backgroundColor = [ UIColor clearColor ] ; 
tableView.opaque = NO ; 
+0

(आप इसे इंटरफ़ेस बिल्डर में कर सकते हैं) – nielsbot

+0

हाँ मेरे पास 'UITableView' की पृष्ठभूमि स्पष्ट है। आप बता सकते हैं क्योंकि छवि में आप काले और टील पृष्ठभूमि डिस्क देखते हैं। हालांकि मैंने 'हाँ' पर अपारदर्शी सेट किया था। हालांकि जब एक ही परिणाम 'नहीं' पर सेट किया गया है। – RoLYroLLs

20

आप CALayermask संपत्ति के साथ ऐसा कर सकते हैं। लेकिन आप टेबल दृश्य की अपनी परत पर मुखौटा सेट नहीं कर सकते क्योंकि वह मुखौटा तालिका की पंक्तियों के साथ स्क्रॉल करेगा। इसके बजाय, अपने टेबल व्यू को एक नए पर्यवेक्षण (कक्षा UIView) के अंदर रखें जिसे आप केवल इसके लिए बनाते हैं। इसे tableMaskView पर कॉल करें।

नई superview अपने backgroundColor संपत्ति UIColor.clearColor करने के लिए सेट और उसके opaque संपत्ति NO करने के लिए सेट होना चाहिए। एक लेयर मास्क का उपयोग करना सबसे कारगर तरीका नहीं है

CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = self.tableMaskView.bounds; 
gradient.colors = [NSArray arrayWithObjects: 
    (__bridge id)UIColor.clearColor.CGColor, 
    UIColor.whiteColor.CGColor, 
    UIColor.whiteColor.CGColor, 
    UIColor.clearColor.CGColor, 
    nil]; 
gradient.locations = [NSArray arrayWithObjects: 
    [NSNumber numberWithFloat:0], 
    [NSNumber numberWithFloat:1.0/16], 
    [NSNumber numberWithFloat:15.0/16], 
    [NSNumber numberWithFloat:1], 
    nil]; 
self.tableMaskView.layer.mask = gradient; 

, लेकिन यह सबसे आसान कार्यक्रम है: तो फिर तुम इस तरह अपने मुखौटा सेट कर सकते हैं। परीक्षण करें कि यह पर्याप्त तेज़ है या नहीं।

[[[self scoreTableView] layer] addSublayer:[self maskLayer]]; 

इस एक के साथ:

+0

हाय रॉब, आपके कोड के लिए धन्यवाद, लेकिन यह क्या कर रहा है मध्य में एक सफेद ब्लॉक डालने और बाहरी (बाहरी और नीचे) ढाल में स्पष्ट है। यह बीच में सामग्री को छुपाता है। – RoLYroLLs

+0

आपको tableMaskView.opaque को NO और tableMaskView.background को रंग बदलने के लिए रंग सेट करने की आवश्यकता है। –

+0

युप, क्या किया। और कुछ? – RoLYroLLs

0

इस लाइन की जगह

self.scoreTableView.layer.mask = self.maskLayer; 

(या यदि आप अपने वाक्य रचना-स्टाइल पर जोर देते हैं और भी सोचा था कि मैं क्यों नहीं देख सकते हैं):

[[[self scoreTableView] layer] setMask:[self maskLayer]]; 

this उत्तर आपकी मदद कर सकता है।

0

स्विफ्ट 3 के संस्करण rob mayoff के answer:

let gradient = CAGradientLayer() 
gradient.frame = tableMaskView.bounds 
gradient.colors = [UIColor.clear.cgColor, UIColor.white.cgColor, 
        UIColor.white.cgColor, UIColor.clear.cgColor] 
gradient.locations = [0 as NSNumber, 1.0/16.0 as NSNumber, 
         15.0/16.0 as NSNumber, 1 as NSNumber] 
tableMaskView.layer.mask = gradient 
संबंधित मुद्दे