Οι κλίσεις στις UIView και UILabels στο iPhone

ψήφοι
218

Πιθανή Διπλότυπο:
Μη αυτόματη επεξεργασία μια κλίση στο iPhone apps;

Η εφαρμογή μου χρειάζεται για την εμφάνιση κειμένου είτε ένα UIViewείτε UILabel, αλλά το πίσω μέρος του εδάφους πρέπει να είναι μια κλίση, σε αντίθεση με ένα αληθινό UIColor. Χρησιμοποιώντας ένα πρόγραμμα γραφικών για να δημιουργήσετε επιθυμητό αποτέλεσμα δεν είναι καλό και το κείμενο μπορεί να ποικίλλει ανάλογα με τα δεδομένα επέστρεψε από ένα διακομιστή.

Ξέρει κανείς ο πιο γρήγορος τρόπος για να αντιμετωπιστεί αυτό; Οι σκέψεις σας ευγνώμονες.

Δημοσιεύθηκε 07/01/2009 στις 21:58
πηγή χρήστη
Σε άλλες γλώσσες...                            


7 απαντήσεις

ψήφοι
777

Ξέρω ότι αυτό είναι ένα παλαιότερο νήμα, αλλά και για μελλοντική αναφορά:

Από το iPhone SDK 3.0, προσαρμοσμένη κλίσεις μπορεί να εφαρμοστεί πολύ εύκολα, χωρίς να υποκλάσεις ή εικόνων, χρησιμοποιώντας τον νέο CAGradientLayer:

 UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
 CAGradientLayer *gradient = [CAGradientLayer layer];
 gradient.frame = view.bounds;
 gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
 [view.layer insertSublayer:gradient atIndex:0];

Ρίξτε μια ματιά στα έγγραφα CAGradientLayer. Μπορείτε να προαιρετικά να καθορίσετε έναρξης και λήξης σημεία (σε περίπτωση που δεν θέλετε μια γραμμική κλίση που πηγαίνει κατ 'ευθείαν από την κορυφή προς τα κάτω), ή ακόμα και συγκεκριμένες θέσεις που αντιστοιχούν σε κάθε ένα από τα χρώματα.

Απαντήθηκε 19/12/2009 στις 01:38
πηγή χρήστη

ψήφοι
120

Μπορείτε να χρησιμοποιήσετε πυρήνα γραφικών για να επιστήσει την κλίση, όπως επισημαίνεται στην απάντηση του Mike. Ως μια πιο λεπτομερή παράδειγμα, μπορείτε να δημιουργήσετε μια UIViewυποκατηγορία για να χρησιμοποιήσετε ως φόντο για σας UILabel. Σε αυτή την UIViewυποκατηγορία, υπερισχύει του drawRect:μέθοδο και εισαγωγή κωδικού παρόμοιο με το ακόλουθο:

- (void)drawRect:(CGRect)rect 
{
    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    CGGradientRef glossGradient;
    CGColorSpaceRef rgbColorspace;
    size_t num_locations = 2;
    CGFloat locations[2] = { 0.0, 1.0 };
    CGFloat components[8] = { 1.0, 1.0, 1.0, 0.35,  // Start color
         1.0, 1.0, 1.0, 0.06 }; // End color

    rgbColorspace = CGColorSpaceCreateDeviceRGB();
    glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);

    CGRect currentBounds = self.bounds;
    CGPoint topCenter = CGPointMake(CGRectGetMidX(currentBounds), 0.0f);
    CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds));
    CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0);

    CGGradientRelease(glossGradient);
    CGColorSpaceRelease(rgbColorspace); 
}

Το συγκεκριμένο παράδειγμα δημιουργεί ένα λευκό, κλίση γυαλιστερό στυλ που προέρχεται από την κορυφή του UIViewστην κάθετη κέντρο της. Μπορείτε να ρυθμίσετε το UIView«s backgroundColorσε ό, τι σας αρέσει και αυτή η γυαλάδα θα κληρωθούν πάνω από αυτό το χρώμα. Μπορείτε, επίσης, να συντάξει ένα ακτινωτή κλίση χρησιμοποιώντας τη CGContextDrawRadialGradientλειτουργία.

Απλά πρέπει να το μέγεθος αυτό UIViewσωστά και να προσθέσετε σας UILabelως δευτερεύουσας προβολής του να πάρει το αποτέλεσμα που επιθυμείτε.

EDIT (23/4/2009): Ανά πρόταση St3fan, το έχω αντικαταστήσει πλαίσιο της προβολής με τα όρια της στον κώδικα. Αυτό διορθώνει για την περίπτωση κατά την προέλευση του άποψη δεν είναι (0,0).

Απαντήθηκε 07/01/2009 στις 22:39
πηγή χρήστη

ψήφοι
71

Κατά τη χρήση CAGradientLayer, σε αντίθεση με CGGradient, η κλίση δεν είναι ομαλή, αλλά έχει αισθητή εντατικοποίηση σε αυτό. δείτε αυτό το παράδειγμα:

Για να πάρετε πιο ελκυστικά αποτελέσματα, είναι καλύτερο να χρησιμοποιήσετε CGGradient.

Απαντήθηκε 13/01/2011 στις 04:18
πηγή χρήστη

ψήφοι
44

Μπορείτε επίσης να χρησιμοποιήσετε ένα γραφικό εικόνα ενός pixel πλάτος και την κλίση, και να ορίσετε την ιδιότητα, προκειμένου να επεκτείνει το γραφικό για να συμπληρώσετε τη θέα (υποθέτοντας σκέφτεστε μια απλή γραμμική κλίση και όχι κάποιο είδος ακτινική γραφικών).

Απαντήθηκε 08/01/2009 στις 01:59
πηγή χρήστη

ψήφοι
24

απάντηση Mirko Froehlich που λειτούργησε για μένα, εκτός από όταν θέλησα να χρησιμοποιήσετε προσαρμοσμένα χρώματα. Το τέχνασμα είναι να προσδιορίζει το χρώμα UI με απόχρωση, τον κορεσμό και τη φωτεινότητα αντί RGB.

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = myView.bounds;
UIColor *startColour = [UIColor colorWithHue:.580555 saturation:0.31 brightness:0.90 alpha:1.0];
UIColor *endColour = [UIColor colorWithHue:.58333 saturation:0.50 brightness:0.62 alpha:1.0];
gradient.colors = [NSArray arrayWithObjects:(id)[startColour CGColor], (id)[endColour CGColor], nil];
[myView.layer insertSublayer:gradient atIndex:0];

Για να πάρετε την απόχρωση, κορεσμός και φωτεινότητα ενός χρώματος, χρησιμοποιήστε το ενσωματωμένο Xcode επιλογή χρώματος και πηγαίνετε στην καρτέλα HSB. Hue μετριέται σε βαθμούς σε αυτήν την προβολή, έτσι χωρίζουν την τιμή από 360 για να πάρει την τιμή που θα θέλετε να εισάγετε τον κωδικό.

Απαντήθηκε 17/06/2012 στις 01:41
πηγή χρήστη

ψήφοι
15

Αυτό είναι ό, τι πήρα εργατικής που UIButton στο IB Xcode για διαφανή / σαφή, και δεν bg εικόνα.

UIColor *pinkDarkOp = [UIColor colorWithRed:0.9f green:0.53f blue:0.69f alpha:1.0];
UIColor *pinkLightOp = [UIColor colorWithRed:0.79f green:0.45f blue:0.57f alpha:1.0];

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = [[shareWordButton layer] bounds];
gradient.cornerRadius = 7;
gradient.colors = [NSArray arrayWithObjects:
                   (id)pinkDarkOp.CGColor,
                   (id)pinkLightOp.CGColor,
                   nil];
gradient.locations = [NSArray arrayWithObjects:
                      [NSNumber numberWithFloat:0.0f],
                      [NSNumber numberWithFloat:0.7],
                      nil];

[[recordButton layer] insertSublayer:gradient atIndex:0];
Απαντήθηκε 25/05/2012 στις 04:54
πηγή χρήστη

ψήφοι
3

Θα επιτευχθεί αυτό το σκοπό με ένα δευτερεύουσας προβολής που είναι UIImageView. Η εικόνα του ImageView είναι επισημαίνοντας είναι μια διαβάθμιση. Τότε θα ορίσετε ένα χρώμα φόντου στο UIView, και έχω μια έγχρωμη προβολή κλίση. Στη συνέχεια μπορώ να χρησιμοποιήσω την άποψη, όπως έχω ανάγκη και ό, τι σχεδιάζετε θα είναι κάτω από αυτή την άποψη κλίση. Με την προσθήκη ενός δεύτερου θέα πάνω από το ImageView, μπορείτε να έχετε κάποιες επιλογές αν το σχέδιό σας θα είναι πάνω ή κάτω από την κλίση ...

Απαντήθηκε 12/05/2009 στις 07:35
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more