ResponsiveLabel A UILabel subclass which responds to touch on specified patterns.

Last update: Jun 11, 2022

Version License Platform

#ResponsiveLabel A UILabel subclass which responds to touch on specified patterns. It has the following features:

  1. It can detect pattern specified by regular expression and apply style like font, color etc.
  2. It allows to replace default ellipse with tappable attributed string to mark truncation
  3. Convenience methods are provided to detect hashtags, username handler and URLs

#Installation

Add following lines in your pod file
pod 'ResponsiveLabel', '~> 1.0.11'

#Usage

The following snippets explain the usage of public methods. These snippets assume an instance of ResponsiveLabel named "customLabel".

#import <ResponsiveLabel.h>

In interface builder, set the custom class of your UILabel to ResponsiveLabel. You may get an error message saying "error: IB Designables: Failed to update auto layout status: Failed to load designables from path (null)" This appears to be an issue with Xcode and Cocoapods and does not seem to cause any problems, but some have been able to fix it, see this Stackoverflow question for more details.

Pattern Detection

//Detects email in text
NSString *emailRegexString = @"[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}";
NSError *error;
NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:emailRegexString
options:0
error:&error];
PatternDescriptor *descriptor = [[PatternDescriptor alloc]initWithRegex:regex withSearchType:PatternSearchTypeAll 
withPatternAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]}];
[self.customLabel enablePatternDetection:descriptor];

String Detection

self.customLabel.userInteractionEnabled = YES;
PatternTapResponder tapResponder = ^(NSString *string) {
    NSLog(@"tapped = %@",string);
};
[self.customLabel enableStringDetection:@"text" withAttributes:@{NSForegroundColorAttributeName:[UIColor redColor],
                                                                 RLTapResponderAttributeName: tapResponder}];

Array of String Detection

self.customLabel.userInteractionEnabled = YES;
PatternTapResponder stringTapAction = ^(NSString *tappedString) {
    NSLog(@"tapped string = %@",tappedString);
  };
[self.customLabel enableDetectionForStrings:@[@"text",@"long"] withAttributes:@{NSForegroundColorAttributeName:[UIColor brownColor],
                                                                                  RLTapResponderAttributeName:stringTapAction}];

HashTag Detection

self.customLabel.userInteractionEnabled = YES;
PatternTapResponder hashTagTapAction = ^(NSString *tappedString) {
NSLog(@"HashTag Tapped = %@",tappedString);
};
[self.customLabel enableHashTagDetectionWithAttributes:
@{NSForegroundColorAttributeName:[UIColor redColor], RLTapResponderAttributeName:hashTagTapAction}];

Username Handle Detection

self.customLabel.userInteractionEnabled = YES;
PatternTapResponder userHandleTapAction = ^(NSString *tappedString){
NSLog(@"Username Handler Tapped = %@",tappedString);
};
[self.customLabel enableUserHandleDetectionWithAttributes:
@{NSForegroundColorAttributeName:[UIColor grayColor],RLTapResponderAttributeName:userHandleTapAction}];

URL Detection

self.customLabel.userInteractionEnabled = YES;
PatternTapResponder urlTapAction = ^(NSString *tappedString) {
NSLog(@"URL Tapped = %@",tappedString);
};
[self.customLabel enableURLDetectionWithAttributes:
@{NSForegroundColorAttributeName:[UIColor cyanColor],NSUnderlineStyleAttributeName:[NSNumber
numberWithInt:1],RLTapResponderAttributeName:urlTapAction}];

Highlight Patterns On Tap

To highlight patterns, one can set the attributes:

  • RLHighlightedForegroundColorAttributeName
  • RLHighlightedBackgroundColorAttributeName
  • RLHighlightedBackgroundCornerRadius
self.customLabel.userInteractionEnabled = YES;
PatternTapResponder userHandleTapAction = ^(NSString *tappedString){
NSLog(@"Username Handler Tapped = %@",tappedString);
};
[self.customLabel enableUserHandleDetectionWithAttributes:
@{NSForegroundColorAttributeName:[UIColor grayColor],RLHighlightedForegroundColorAttributeName:[UIColor greenColor],RLHighlightedBackgroundCornerRadius:@5,RLHighlightedBackgroundColorAttributeName:[UIColor blackColor],RLTapResponderAttributeName:userHandleTapAction}];

Custom Truncation Token

Set attributed string as truncation token
Deprecated in 1.0.10
NSString *expansionToken = @"Read More ...";
NSString *str = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithString:kExpansionToken attributes:@{NSForegroundColorAttributeName:[UIColor blueColor],NSFontAttributeName:self.customLabel.font}];
[self.customLabel setAttributedTruncationToken:attribString withAction:^(NSString *tappedString) {
NSLog(@"Tap on truncation text");
}];
[self.customLabel setText:str withTruncation:YES];
Latest introduced on 1.0.10
NSString *expansionToken = @"Read More ...";
NSString *str = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
PatternTapResponder tap = ^(NSString *string) {
   NSLog(@"Tap on truncation text");
  }
NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithString:kExpansionToken attributes:@{NSForegroundColorAttributeName:[UIColor blueColor],NSFontAttributeName:self.customLabel.font,RLTapResponderAttributeName:tap}];
[self.customLabel setAttributedTruncationToken:attribString];
[self.customLabel setText:str withTruncation:YES];
Set image as truncation token

The height of image size should be approximately equal to or less than the font height. Otherwise the image will not be rendered properly

[self.customLabel setTruncationIndicatorImage:[UIImage imageNamed:@"more_image"] withSize:CGSizeMake(25, 5) andAction:^(NSString *tappedString) {
    NSLog(@"tapped on image");
 }];
Set from interface builder

Screenshots

References

The underlying implementation of ResponsiveLabel is based on KILabel(https://github.com/Krelborn/KILabel). ResponsiveLabel is made flexible to enable detection of any pattern specified by regular expression.

The following articles were helpful in enhancing the functionalities.

GitHub

https://github.com/hsusmita/ResponsiveLabel
Comments
  • 1. Crash in ResponsiveLabel.m line 335

    @hsusmita Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds'

    Can you check it out?

    Reviewed by nick3389 at 2015-09-17 10:17
  • 2. Truncation token set from interface builder does not show

    I am trying to set the truncation token in IB, but I do not have width/height constraints. I have top, bottom, left, right constraints instead. The UILabel is set to be a ResponsiveLabel, number of lines = 0.

    The token shows in IB, but not when the app runs

    Any ideas?

    Reviewed by Mackarous at 2015-08-14 18:58
  • 3. Crash while scrolling: index (X) beyond array bounds (X)

    Hi!

    I'm getting some random crashes when using a ResponsiveLabel inside a xib from a TableView. When first displayed on the TableView, it goes ok, but when I scroll down, see the next row, and then scroll back to the first row, it crashes. This happens only when the text is close to the edge of the label, for example (the pipes | denotes labels' bounds):

    | this is a text @text | < fine | this is a text that @crashs | < not ok

    Here's the log:

    2015-10-03 10:05:33.926 App[2063:57122] * Terminating app due to uncaught exception 'NSRangeException', reason: '* NSRunStorage, _NSBlockNumberForIndex(): index (80) beyond array bounds (80)' *** First throw call stack: ( 0 CoreFoundation 0x000000010c57df65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x000000010bbd8deb objc_exception_throw + 48 2 CoreFoundation 0x000000010c57de9d +[NSException raise:format:] + 205 3 UIFoundation 0x00000001155ce94b _NSBlockNumberForIndex + 84 4 UIFoundation 0x000000011558c369 -[NSLayoutManager(NSPrivate) _invalidateGlyphsForExtendedCharacterRange:changeInLength:includeBlocks:] + 703 5 UIFoundation 0x0000000115580695 -[NSLayoutManager(NSPrivate) _fillLayoutHoleForCharacterRange:desiredNumberOfLines:isSoft:] + 1030 6 UIFoundation 0x0000000115582104 -[NSLayoutManager(NSPrivate) _fillLayoutHoleAtIndex:desiredNumberOfLines:] + 201 7 UIFoundation 0x0000000115582787 -[NSLayoutManager(NSPrivate) _markSelfAsDirtyForBackgroundLayout:] + 339 8 UIFoundation 0x000000011558ced7 -[NSLayoutManager(NSPrivate) _invalidateLayoutForExtendedCharacterRange:isSoft:invalidateUsage:] + 2106 9 UIFoundation 0x00000001155bcfea -[NSLayoutManager textStorage:edited:range:changeInLength:invalidatedRange:] + 219 10 UIFoundation 0x00000001155bd2d2 -[NSLayoutManager processEditingForTextStorage:edited:range:changeInLength:invalidatedRange:] + 47 11 UIFoundation 0x00000001155e4a76 -[NSTextStorage _notifyEdited:range:changeInLength:invalidatedRange:] + 152 12 UIFoundation 0x00000001155e4591 -[NSTextStorage processEditing] + 349 13 UIFoundation 0x00000001155e41eb -[NSTextStorage endEditing] + 82 14 Foundation 0x000000010a33b10d -[NSMutableAttributedString addAttributes:range:] + 321 15 UIFoundation 0x00000001155e69c4 __45-[NSConcreteTextStorage addAttributes:range:]_block_invoke + 267 16 UIFoundation 0x00000001155e682e -[NSConcreteTextStorage addAttributes:range:] + 109 17 App 0x000000010889803f __53-[ResponsiveLabel addAttributesForPatternDescriptor:]_block_invoke + 799 18 CoreFoundation 0x000000010c4bfd7d __53-[__NSArrayI enumerateObjectsWithOptions:usingBlock:]_block_invoke + 77 19 CoreFoundation 0x000000010c4bfc26 -[__NSArrayI enumerateObjectsWithOptions:usingBlock:] + 166 20 App 0x0000000108897cc7 -[ResponsiveLabel addAttributesForPatternDescriptor:] + 311 21 App 0x00000001088997a5 __37-[ResponsiveLabel updateTextStorage:]_block_invoke + 133 22 CoreFoundation 0x000000010c4b6466 __65-[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:]_block_invoke + 102 23 CoreFoundation 0x000000010c4b635a -[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] + 202 24 App 0x00000001088996dc -[ResponsiveLabel updateTextStorage:] + 476 25 App 0x00000001088933e3 -[ResponsiveLabel setText:] + 275 26 App 0x00000001087fbb7a -[FeedMainViewController tableView:cellForRowAtIndexPath:] + 1290 27 UIKit 0x000000010a8b06b3 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 782 28 UIKit 0x000000010a8b07c8 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74 29 UIKit 0x000000010a886589 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2988 30 UIKit 0x000000010a8b9595 -[UITableView _performWithCachedTraitCollection:] + 92 31 UIKit 0x000000010a8a19ad -[UITableView layoutSubviews] + 218 32 UIKit 0x000000010a81211c -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 710 33 QuartzCore 0x000000010918d36a -[CALayer layoutSublayers] + 146 34 QuartzCore 0x0000000109181bd0 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 35 QuartzCore 0x0000000109181a4e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 36 QuartzCore 0x00000001091761d5 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277 37 QuartzCore 0x00000001091a39f0 _ZN2CA11Transaction6commitEv + 508 38 QuartzCore 0x00000001091b27cc _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 576 39 CoreFoundation 0x000000010c4de364 CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 20 40 CoreFoundation 0x000000010c4ddf11 __CFRunLoopDoTimer + 1089 41 CoreFoundation 0x000000010c49f8b1 __CFRunLoopRun + 1937 42 CoreFoundation 0x000000010c49ee98 CFRunLoopRunSpecific + 488 43 GraphicsServices 0x000000010da14ad2 GSEventRunModal + 161 44 UIKit 0x000000010a761676 UIApplicationMain + 171 45 App 0x00000001088a249f main + 111 46 libdyld.dylib 0x0000000110bf992d start + 1 47 ??? 0x0000000000000001 0x0 + 1 )

    Reviewed by ivanviragine at 2015-10-03 13:13
  • 4. Zero Label view size

    I have only parent ViewController(not TableViewCell) and a Label with associated ResponsiveLabel custom class. In runtime I cannot see the label, 'cos it's zero heigh and width. Is it a feature or a bug? How can I fix this?

    Reviewed by romanvbabenko at 2015-07-06 07:38
  • 5. Read more and Read less issue.

    Actually i am using your library to expand/collapse UILabel in UITableViewCell. but some times when i click on "Read more" the UILabel is expand but not showing "Read less" label. so can you please help me to short out my issue. it is batter if you provide demo. here is my code that has been written in "cellForRowAtIndexPath" ..

            __block  NSString *str =mutArrEventList[indexPath.row][@"event_desc"];
            PatternTapResponder tap = ^(NSString *string) {
                NSLog(@"Tap on truncation text");
    
                if (![arrayOfExpandIndexPaths containsObject:indexPath]) {
                    [arrayOfExpandIndexPaths addObject:indexPath];
                }
    
                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationFade];
                });
    
            };
    
    
    
            if (![arrayOfExpandIndexPaths containsObject:indexPath]) {
    
                 NSString *expansionToken = @"...Read more";
    
                NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithString:expansionToken attributes:@{NSForegroundColorAttributeName:[UIColor blueColor],NSFontAttributeName:cell.lblDesc.font,RLTapResponderAttributeName:tap}];
                [cell.lblDesc setAttributedTruncationToken:attribString];
    
                cell.lblDesc.numberOfLines = 3;
                [cell.lblDesc setText:str withTruncation:YES];
            }
            else{
    
                NSString *expansionToken = @" Read less";
    
                NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithString:expansionToken attributes:@{NSForegroundColorAttributeName:[UIColor blueColor],NSFontAttributeName:cell.lblDesc.font,RLTapResponderAttributeName:tap}];
                [cell.lblDesc setAttributedTruncationToken:attribString];
    
    
                cell.lblDesc.numberOfLines = 0;
                [cell.lblDesc setText:str withTruncation:NO];
                cell.lblDesc.customTruncationEnabled = YES;
            }
    
    Reviewed by jpatel956 at 2015-12-23 12:36
  • 6. Doesn't respect numberOfLines property?

    So my label.numberOfLines = 4. So it always draw a big UILabel rect even if text is just one line. No matters how small a text is it always consider its a big as provided in numberOfLines.

    Reviewed by kidsid49 at 2015-10-24 05:45
  • 7. ResponsiveLabel not updating correctly in UITableView

    I have a UITableViewCell in which I am using two separate ResponsiveLabel. When I scroll through the table the ResponsiveLabel is repeating text from pervious cells. I have checked that the text being set in the fields was the correct text. My logging appears to show that this is not the problem. I then started looking at where the various draw methods are being called, and this leads me to believe that the issue is with the ResponsiveLabel. It appears that even though the text is being correctly set from the model, the ResponsiveLabel’s draw method is being called before the text is set in the ResponsiveLabel. My logging is currently showing that the ResponsiveLabel’s text is often null when the cell is being draw. Using the current version of ResponsiveLabel 1.0.5

    Reviewed by David-Molloy at 2015-08-25 11:27
  • 8. Change the font for the first match

    I'm facing a problem when the sentece has same words. eg: Username "a" sentence: "a": i have "a" dream i'd change the font for only the fist "a".

    Does anyone knows how to do that?

    Reviewed by CavalcanteLeo at 2016-03-10 20:02
  • 9. How to change the default Black Color of ResponsiveLabel.

    How can I change the default Black color of ResponsiveLabel. I've tried setting the White color through the Attributes Inspector as well as through code but it still shows the default black color.

    Reviewed by CGTRahul at 2015-10-14 07:22
  • 10. Create clickable words instead just one word.

    Hi, I found your components, seems it works great. But it will be also cool if you can add support NSArray of custom words that can be clickable.

    Thanks

    Reviewed by matrosovDev at 2015-06-05 16:43
  • 11. Add expanded state end token

    Hi,

    Here is the use case I would like to be able to achieve with the label. Have the "More" label (TruncationToken) to expand the view and a "... Less" label at the end of the text when the view is expanded and want to revert to the collapsed view.

    Setting the setAttributedTruncationToken of the label after it has expanded doesn't display the "... Less" label since it's not truncated anymore.

    Could you provide functionality to accomplish this?

    Thank you very much for your help.

    Reviewed by luctek at 2015-10-13 19:52
  • 12. Adding multiple detection like email, userhandler and url doesn't work

    I add email detection, url detection and userhandler detection on same label but its not working properly. When i add [email protected] its take @y as a userhandler detection part and chirag & .com as a url detection part. So it's not detect [email protected] as email part.

    NSString *emailRegexString = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
        NSError *error;
        NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:emailRegexString
                                                                         options:0
                                                                           error:&error];
        PatternDescriptor *descriptor = [[PatternDescriptor alloc]initWithRegex:regex withSearchType:PatternSearchTypeAll
                                                          withPatternAttributes:@{NSForegroundColorAttributeName:[UIColor greenColor]}];
        [self.postDetailsL enablePatternDetection:descriptor];
    
    PatternTapResponder userHandleTapAction = ^(NSString *tappedString){
            if ([self.delegate respondsToSelector:@selector(feedCell:didTapOnUserHandle:)]) {
                [self.delegate feedCell:self didTapOnUserHandle:tappedString];
            }
        };
        [self.postDetailsL enableUserHandleDetectionWithAttributes:@{NSForegroundColorAttributeName:[UIColor blueColor], RLTapResponderAttributeName:userHandleTapAction}];
    
    PatternTapResponder URLTapAction = ^(NSString *tappedString){
            if ([self.delegate respondsToSelector:@selector(feedNoMediaCell:didTapOnURLHandle:)]) {
                [self.delegate feedNoMediaCell:self didTapOnURLHandle:tappedString];
            }
        };
        [self.postDetailsL enableURLDetectionWithAttributes:@{NSForegroundColorAttributeName:[UIColor TARedesDisplayColor], NSUnderlineStyleAttributeName:[NSNumber numberWithInt:1], RLTapResponderAttributeName:URLTapAction}];
    
    Reviewed by Chirag89-JackSparrow at 2018-08-27 13:29
  • 13. IBOutlet issue

    Hello,

    I am trying to add Responsive label in xib. But xib is giving error:

    screen shot 2018-08-10 at 12 22 54 pm

    Also if I select Inherit Module from Target xib is not giving error but app is crashing. Because it considered label as UILabel than Responsive Label.

    screen shot 2018-08-10 at 12 23 27 pm
    Reviewed by maulikpat at 2018-08-10 06:54
  • 14. Crash on - [ResponsiveLabel performActionAtIndex:] in swift 3.0

    Perhaps I'm defining my closure wrong, but when defining a closure to work with a responsive label, the subsequent action execution attempts to pull a closure out of self.textStorage at memory address 0x00000

    In this example, cell.containedView is a ResponsiveLabel, and hashtagResponder is an ivar defined as:

    fileprivate var hashtagResponder: PatternTapResponder?
    
    hashtagResponder = { [weak self] hashtag in
        if let strongSelf = self, let hashtag = hashtag {
            strongSelf.delegate?.didTapHashtag(name: hashtag, storySectionController: strongSelf)
        }
    }
    cell.containedView.enableHashTagDetection(attributes: [NSForegroundColorAttributeName : UIColor.primaryBrand, RLTapResponderAttributeName : hashtagResponder! as AnyObject])
    
    screen shot 2017-06-12 at 1 37 23 pm
    (lldb) po tapResponder
    0x0000000000000000
    

    This is not a reuse issue, because the controller that owns the PatternTapResponder is still in memory.

    Any help is appreciated.

    Reviewed by bounds at 2017-06-12 18:37
Unrealm is an extension on RealmCocoa, which enables Swift native types to be saved in Realm.
Unrealm is an extension on RealmCocoa, which enables Swift native types to be saved in Realm.

Unrealm enables you to easily store Swift native Classes, Structs and Enums into Realm . Stop inheriting from Object! Go for Protocol-Oriented program

Jun 13, 2022
Shows the issue with swift using an ObjC class which has a property from a swift package.

SwiftObjCSwiftTest Shows the issue with swift using an ObjC class which has a property from a swift package. The Swift class (created as @objc derived

Nov 8, 2021
SwiftResponsiveLabel - A UILabel subclass which responds to touch on specified patterns
SwiftResponsiveLabel - A UILabel subclass which responds to touch on specified patterns

SwiftResponsiveLabel A UILabel subclass which responds to touch on specified patterns. It has the following features: It can detect pattern specified

Dec 17, 2021
UILabel subclass, which additionally allows shadow blur, inner shadow, stroke text and fill gradient.
UILabel subclass, which additionally allows shadow blur, inner shadow, stroke text and fill gradient.

THLabel THLabel is a subclass of UILabel, which additionally allows shadow blur, inner shadow, stroke text and fill gradient. Requirements iOS 4.0 or

Apr 1, 2022
IHTypeWriterLabel - A simple, UILabel subclass which poulates itself as if being typed
IHTypeWriterLabel - A simple, UILabel subclass which poulates itself as if being typed

IHTypeWriterLabel A simple, UILabel subclass which poulates itself as if being typed. HighLights Written purely in SWIFT. Very simple and lightweight.

May 7, 2019
A container view that responds to scrolling of UIScrollView
A container view that responds to scrolling of UIScrollView

FlexibleHeader A container view that responds to scrolling of UIScrollView. normal threshold FlexibleHeaderExecutantType Getting Started Progressive I

May 2, 2022
SnackBar that responds to the keyboard and shows a message at the bottom of the screen.
SnackBar that responds to the keyboard and shows a message at the bottom of the screen.

DGSnackBar Requirements Installation Usage Properties DGSnackBar SnackBar that responds to the keyboard and shows a message at the bottom of the scree

Jan 26, 2022
KDEDateLabel is an UILabel subclass that updates itself to make time ago's format easier.
KDEDateLabel is an UILabel subclass that updates itself to make time ago's format easier.

KDEDateLabel KDEDateLabel is an UILabel subclass that saves you from refreshing it when using 'time ago' format. Installation You have multiple choice

May 16, 2022
A morphing UILabel subclass written in Swift.
A morphing UILabel subclass written in Swift.

LTMorphingLabel A morphing UILabel subclass written in Swift. The .Scale effect mimicked Apple's QuickType animation of iOS 8 of WWDC 2014. New morphi

Jun 19, 2022
A simple designable subclass on UILabel with extra IBDesignable and Blinking features.
A simple designable subclass on UILabel with extra IBDesignable and Blinking features.

JSLabel Demo pod try JSLabel ...or clone this repo and build and run/test the JSLabel project in Xcode to see JSLabel in action. If you don't have Coc

May 9, 2022
UILabel subclass to perform text effects
UILabel subclass to perform text effects

CharacterText uses NSLayoutManager to position CATextLayers for each glyph in your string. This gives you the power to create some neat text effect using all the attributes of CATextLayer.

Apr 19, 2022
A basic countdown app that allows the user to create, edit, and delete events. Each event contains a live countdown timer to a specified date and time.

Event Countdown App (iOS) Created by Lucas Ausberger About This Project Created: January 4, 2021 Last Updated: January 8, 2021 Current Verison: 1.1.1

Jan 8, 2022
A simple to use iOS app with clean UI to calculate time until a specified date
A simple to use iOS app with clean UI to calculate time until a specified date

A simple to use iOS app with clean UI to calculate time until a specified date.Added new feature that is now you can measure time from a specified date as well. Like time spent from the day you were born.

Feb 28, 2022
This is Github user search demo app which made by many variety of design patterns.
This is Github user search demo app which made by many variety of design patterns.

iOSDesignPatternSamples This is Github user search demo app which made by many variety of design patterns. Application Structure SearchViewController.

Jun 24, 2022
iPhone and iPod Touch version of Skeleton Key: is an addictive and unique puzzle game in which you shift keys around the board unlocking treasure chests. Made with cocos2d-iphone.

Skeleton Key (iOS) Skeleton Key is an addictive and unique puzzle game in which you shift keys around the board unlocking treasure chests. It's availa

Jun 6, 2022
Squares - a toy drum machine which you can control by multi touch capabilities of your track pad
Squares - a toy drum machine which you can control by multi touch capabilities of your track pad

Squares Squares is a toy drum machine which you can control by multi touch capab

Jan 25, 2022
Card Decks is a small utility application for your iPhone, iPod touch and iPad which brings you simple, configurable, colored, multi-line text cards that are grouped into card decks

Card Decks is a small utility application for your iPhone, iPod touch and iPad which brings you simple, configurable, colored, multi-line text cards that are grouped into card decks.

Feb 10, 2022
A fully customisable subclass of the native UIControl which allows you to create beautiful buttons without writing any line of code.
A fully customisable subclass of the native UIControl which allows you to create beautiful buttons without writing any line of code.

A fully customisable subclass of the native UIControl which allows you to create beautiful buttons without writing any line of code. Preview You'll be

Jun 18, 2022
A fully customisable swift subclass on UIButton which allows you to create beautiful buttons without writing any line of code.
A fully customisable swift subclass on UIButton which allows you to create beautiful buttons without writing any line of code.

JSButton Demo $ pod try JSButton ...or clone this repo and build and run/test the JSButton project in Xcode to see JSButton in action. If you don't ha

May 9, 2022
SMNumberWheel is a subclass of UIControl written in Swift, which is ideal for picking numbers using a rotating wheel.

SMNumberWheel version: 1.0.3 [![CI Status](http://img.shields.io/travis/Sina Moetakef/SMNumberWheel.svg?style=flat)](https://travis-ci.org/Sina Moetak

Mar 15, 2022