Vijf tips voor het maken van stijlvolle UIButtons

Soms zijn er maar een paar regels code nodig om je interface te laten knallen. Deze tutorial leert je vijf eenvoudige trucs voor het maken van stijlvolle UIButtons om je app opvallend te maken!

Latere wijzigingen in technieken & software

Bepaalde aspecten van toepassingen of technieken die in deze zelfstudie worden gebruikt, zijn gewijzigd sinds de publicatie oorspronkelijk werd gepubliceerd. Dit maakt het misschien een beetje moeilijk om mee te volgen. We raden u aan deze meer recente zelfstudies over hetzelfde onderwerp te bekijken:

  • Mobiletuts + iOS SDK-categorie

Project Preview


Project Setup

In de download die bij deze zelfstudie hoort, vindt u de mappen getiteld "Initial Build" en "Final Build". In plaats van alle stappen te tonen die nodig zijn om het initiële project in te stellen, hoeft u alleen de bijlage te downloaden en het project te volgen vanuit de map "Initial Build".

Ga met het initiële project open naar de ViewController.m bestand en zoek de voor loop binnen de viewDidLoad methode. De codefragmenten van de onderstaande tips moeten binnen deze lus worden geplaatst.


Tip # 1: Tweak Colors & Gradients

De meest fundamentele stap naar het aanpassen van de UIButton klasse is om de kleur van de achtergrond en titel aan te passen voor zowel de standaard als gemarkeerde staten. Met het volgende codefragment wordt de achtergrondkleur van elke knop ingesteld op zwart, normale titelkleur op wit en de gemarkeerde titelkleur op rood:

 // Zet de knop Text Color [btn setTitleColor: [UIColor whiteColor] forState: UIControlStateNormal]; [btn setTitleColor: [UIColor redColor] forState: UIControlStateHighlighted]; // Stel de knop Achtergrondkleur in [btn setBackgroundColor: [UIColor blackColor]];

Stevige achtergrondkleuren zijn geweldig, maar een subtiel verloop kan vaak het verschil maken tussen neutraal en gepolijst. Vervang de setBackgroundColor: bericht hierboven met het volgende om een ​​aangepast verloop te maken:

 // Teken een aangepast verloop CAGradientLayer * btnGradient = [CAGradientLayer-laag]; btnGradient.frame = btn.bounds; btnGradient.colors = [NSArray arrayWithObjects: (id) [[UIColor colorWithRed: 102.0f / 255.0f groen: 102.0f / 255.0f blauw: 102.0f / 255.0f alpha: 1.0f] CGColor], (id) [[UIColor colorWithRed : 51.0f / 255.0f groen: 51.0f / 255.0f blauw: 51.0f / 255.0f alpha: 1.0f] CGColor], niets]; [btn.layer insertSublayer: btnGradient atIndex: 0];

Beginnend met regel 4 hierboven, een NSArray wordt gemaakt met de begin- en doelgradiëntkleuren. Merk op dat de corresponderende RGB-waarden moeten worden gedeeld door 255 voordat ze worden geleverd aan de colorWithRed: groen: blauw: alpha: bericht en dat een alpha-waarde van 1.0 staat voor volledig ondoorzichtig terwijl een alpha-waarde van 0.0 vertegenwoordigt volledig transparant. Helaas is een volledige uitleg van de "magie" hierboven buiten het bestek van deze zelfstudie, maar het belangrijkste om te onthouden is dat je gewoon de RGB-waarden moet vervangen door de begin- / eindwaarden die je wilt gebruiken in je eigen gebruik. helling.

Als alles goed is gegaan, ziet uw menu er nu ongeveer zo uit:

Niet slecht, toch? En we zijn nog maar net begonnen ...


Tip # 2: Rond de hoeken

Vervolgens willen we elk een eigen hoekradius toevoegen UIButton om het er iets gladder uit te laten zien. Voeg de volgende coderegels in om dit te laten gebeuren:

 // Ronde knoophoeken CALayer * btnLayer = [btn layer]; [btnLayer setMasksToBounds: YES]; [btnLayer setCornerRadius: 5.0f];

In regel 4 hierboven is de hoekradius ingesteld op 5.0. Speel met dit nummer om te vergroten of verkleinen hoe merkbaar de hoeken verschijnen.

U zou nu een menu moeten hebben dat er net wat gelikter uitziet:


Tip # 3: voeg een lijngrens toe

Soms maken de kleine aanpassingen het verschil. Voeg om elke knop een 1px zwarte streep toe met de volgende coderegels:

 // Een 1 pixel, zwarte rand toepassen [btnLayer setBorderBreedte: 1.0f]; [btnLayer setBorderColor: [[UIColor blackColor] CGColor]];

Kun je het verschil zien? Het is heel subtiel, maar nog steeds waardevol:


Tip # 4: gebruik een aangepast lettertype

Laten we nu eens een meer opmerkelijke aanpassing proberen. Het standaardsysteemlettertype snijdt het gewoon niet. Het gamemenu dat we bouwen heeft een lettertype nodig dat de visuele esthetiek van het spel kan evenaren. Een snelle zoekopdracht op Google Fonts onthult alleen een lettertype genaamd Knewave door Tyler Finck dat de truc zou moeten doen. Download Knewave nu.

Na het downloaden van de Knewave-Regular.ttf bestand, moet u het naar het Project Navigator-paneel in Xcode slepen om het aan uw project toe te voegen. Open vervolgens de Info.plist het dossier. Voeg een nieuwe rij met eigenschappenlijsten toe en typ 'Lettertypen geleverd door toepassing'. Er moet automatisch een array worden gemaakt. Stel de string geassocieerd met Item 0 in op "Knewave-Regular.ttf". Controleer de naam dubbel, want de waarde is hoofdlettergevoelig. Sla het bestand op.

Na het maken van de bovenstaande wijziging, zou uw Info.plist-bestand er nu als volgt uit moeten zien:

Vervolgens moet je het toevoegen Knewave-Regular.ttf bestand naar de gebundelde bronnen van uw project. Selecteer "SleekButtons" in de Project Navigator en klik vervolgens op het tabblad "Fasen opbouwen". Vouw het selectievakje "Bundelbundel kopiëren" uit en klik vervolgens op het plusteken.

Op dit punt zou je het Knewave-lettertype in je project moeten kunnen gebruiken! Laten we dat testen door terug te springen naar de ViewController.m bestand en wijzigen van de viewDidLoad methode om een ​​aangepast lettertype in te stellen:

 // Zet de knop Text Color [btn setTitleColor: [UIColor whiteColor] forState: UIControlStateNormal]; [btn setTitleColor: [UIColor redColor] forState: UIControlStateHighlighted]; // Aangepast lettertype toevoegen [[btn titleLabel] setFont: [UIFont fontWithName: @ "Knewave" size: 18.0f]]; // Teken een aangepast verloop CAGradientLayer * btnGradient = [CAGradientLayer-laag]; btnGradient.frame = btn.bounds;

Merk op dat de fontWithName waarde wordt gespecificeerd als "Knewave", niet "Knewave-Regular" zoals je zou verwachten. Dit komt omdat er een verschil is tussen de bestandsnaam van het lettertype en de voornaam van het lettertype. U moet er zeker van zijn dat u de opgegeven naam gebruikt wanneer u met uw eigen lettertypen werkt.

Met de bovenstaande code moet het gamemenu compleet zijn! Bouw en run nu en je zou iets als het volgende moeten zien:


Tip # 5: Optioneel: een rotatie toepassen

Hoewel niet gebruikt in het primaire ontwerp zoals aangetoond in deze tutorial, is het vaak handig om een ​​kleine rotatie toe te passen op UIKit-elementen, in het bijzonder UIButton of UIImage voorwerpen. Dit is eenvoudig en kan worden gedaan met slechts één regel code.

Je kunt dit uitproberen met de code die tot nu toe is geschreven door het volgende te doen:

 self.startGameButton.transform = CGAffineTransformMakeRotation (M_PI / 180 * 5.0f); for (UIButton * btn in buttons) // Zet de knop Text Color [btn setTitleColor: [UIColor whiteColor] forState: UIControlStateNormal]; [btn setTitleColor: [UIColor redColor] forState: UIControlStateHighlighted];

In regel 1 hierboven, de constante M_PI wordt gedeeld door 180 om 1 radiaal te genereren, die vervolgens wordt vermenigvuldigd met 5.0f voor een rotatie van 5 radialen. Zoals u zult opmerken als u het project bouwt en uitvoert, leidt het bovenstaande waarschijnlijk tot anti-aliasing-problemen met UIKit-elementen die dynamisch worden getekend. Bijgevolg is het toepassen van een rotatie meer geschikt met een UIButton wanneer de eigenschap background image is ingesteld en rasterafbeeldingen in gebruik zijn (dit werkt het beste met PNG-bestanden).


Bonustip: gebruik UIButton-Glossy

Met de vijf bovenstaande tips, heb je gezien hoe gemakkelijk het kan zijn om subtiele maar belangrijke aanpassingen aan een te maken UIButton voorwerp. Maar wat als ik je zou vertellen dat dit nog eenvoudiger zou kunnen zijn? Ontmoeten UIButton-Glossy, een open-source categorie van George McMullen die automatisch zowel een verloop als een glanzende afwerking toepast UIButton voorwerpen.

Implementeren UIButton-Glossy in je eigen project is eenvoudig. Nadat je de. Hebt gedownload UIButton-Glossy.h en UIButton-Glossy.m bestanden en voeg ze toe aan uw Xcode-project, importeer het * .h-bestand in de hoofdprojectview-controller, zoals dit:

 #import "ViewController.h" #import "UIButton + Glossy.h"

Nu kunt u direct een cool glanzend effect op uw knoppen toepassen met slechts één regel code: [btn makeGlossy];.

Om dit in actie te zien, vervangt u de bestaande code van de weergavecontroller met het volgende:

 for (UIButton * btn in buttons) // Zet de knop Text Color [btn setTitleColor: [UIColor whiteColor] forState: UIControlStateNormal]; [btn setTitleColor: [UIColor redColor] forState: UIControlStateHighlighted]; // Stel de standaard backgrondkleur in [btn setBackgroundColor: [UIColor blackColor]]; // Aangepast lettertype toevoegen [[btn titleLabel] setFont: [UIFont fontWithName: @ "Knewave" size: 18.0f]]; // Maak glanzend [btn makeGlossy]; 

Je knoppen zouden nu een glanzende afwerking moeten hebben en het eindresultaat zou er ongeveer zo uit moeten zien:


Afronden

Deze zelfstudie heeft meerdere technieken voor het maken van aangepaste gedemonstreerd UIButton objecten schijnen. Download het bijgevoegde project voor een glimp van de volledige, definitieve broncode.

Vragen? Opmerkingen? Geluid hieronder of stuur me direct een bericht @markhammonds.