Difference between Frame and Bounds in iphone programming

The bounds of an UIView is the rectangle, expressed as a location (x,y) and size (width,height) relative to its own coordinate system (0,0).

The frame of an UIView is the rectangle, expressed as a location (x,y) and size (width,height) relative to the superview it is contained within.

So, imagine a view that has a size of 100×100 (width x height) positioned at 25,25 (x,y) of its superview. The following code prints out this view’s bounds and frame:

// This method is in the view controller of the superview
- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"bounds.origin.x: %f", label.bounds.origin.x);
    NSLog(@"bounds.origin.y: %f", label.bounds.origin.y);
    NSLog(@"bounds.size.width: %f", label.bounds.size.width);
    NSLog(@"bounds.size.height: %f", label.bounds.size.height);

    NSLog(@"frame.origin.x: %f", label.frame.origin.x);
    NSLog(@"frame.origin.y: %f", label.frame.origin.y);
    NSLog(@"frame.size.width: %f", label.frame.size.width);
    NSLog(@"frame.size.height: %f", label.frame.size.height);
}

And the output of this code is:

bounds.origin.x: 0
bounds.origin.y: 0
bounds.size.width: 100
bounds.size.height: 100

frame.origin.x: 25
frame.origin.y: 25
frame.size.width: 100
frame.size.height: 100

So, we can see that in both cases, the width and the height of the view is the same regardless of whether we are looking at the bounds or frame. What is different is the x,y positioning of the view. In the case of the bounds, the x and y coordinates are at 0,0 as these coordinates are relative to the view itself. However, the frame x and y coordinates are relative to the position of the view within the parent view (which earlier we said was at 25,25).

 

 

referred from stackOverflow

Advertisements

Encoding the special charecters of a NSString in Objective-c

NSString *unescaped = @"http://www";
NSString *escapedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
    NULL,
   (CFStringRef)unescaped,
    NULL,
    CFSTR("!*'();:@&=+$,/?%#[]"),
    kCFStringEncodingUTF8);

NSLog(@"escapedString: %@",escapedString);

NSLog output:

escapedString: http%3A%2F%2Fwww

Under ARC one alternative is:

NSString *escapedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
    NULL,
   (__bridge CFStringRef) unescaped,
    NULL,
    CFSTR("!*'();:@&=+$,/?%#[]"),
    kCFStringEncodingUTF8));

Ad Mob code in ios

 
    bannerView = [[GADBannerView alloc]
                  initWithFrame:CGRectMake(0, 335, 320, 35)];

                                  (or)

    AbMob = [[GADBannerView alloc]
      initWithFrame:CGRectMake(0.0,
                      self.view.frame.size.height – GAD_SIZE_300x250.height,GAD_SIZE_320x50.width,GAD_SIZE_320x50.height)];
    
    
    bannerView.adUnitID = @”your admob id”;
    bannerView.rootViewController = self;
    [self.view addSubview:bannerView];
    
    
    GADRequest *r = [[GADRequest alloc] init];

//keep testing =Yes if the ad is in testing phase and while uplaoding to appstore remove this line
    r.testing = YES;
    [bannerView loadRequest:r];
    

The frameworks need to be included for admobs are

  • StoreKit
  • AudioToolbox
  • MessageUI
  • SystemConfiguration
  • CoreGraphics
  • AdSupport

and do not forget if you are using the admob version> 6.1 add -ObjC to Otherlinker flags in build settings

 

Method to know the freesize and total space in an apple device

-(float)getTotalDiskSpaceInBytes {
    float totalSpace = 0.0f;
    NSError *error = nil;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];
    
    if (dictionary) {
        //gives total space in the device
        NSNumber *fileSystemSizeInBytes = [dictionary objectForKey: NSFileSystemSize];
        //gives the free space in device
        NSNumber *usedSpaceInBytes = [dictionary objectForKey: NSFileSystemFreeSize];

        totalSpace = [fileSystemSizeInBytes floatValue];
    } else {
        //DLog(@”Error Obtaining File System Info: Domain = %@, Code = %@”, [error domain], [error code]);
        NSLog(@”Error Obtaining File System Info: Domain = %@, Code = %ld”, [error domain], (long)[error code]);
    }
    
    return totalSpace;
}

Method to find in which device our app is running

– (NSString *) platformString {
    // Gets a string with the device model
    size_t size;
    sysctlbyname(“hw.machine”, NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname(“hw.machine”, machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
    free(machine);
    
    if ([platform isEqualToString:@”iPhone1,1″])    return @”iPhone 2G”;
    if ([platform isEqualToString:@”iPhone1,2″])    return @”iPhone 3G”;
    if ([platform isEqualToString:@”iPhone2,1″])    return @”iPhone 3GS”;
    if ([platform isEqualToString:@”iPhone3,1″])    return @”iPhone 4″;
    if ([platform isEqualToString:@”iPhone3,2″])    return @”iPhone 4″;
    if ([platform isEqualToString:@”iPhone3,3″])    return @”iPhone 4 (CDMA)”;
    if ([platform isEqualToString:@”iPhone4,1″])    return @”iPhone 4S”;
    if ([platform isEqualToString:@”iPhone5,1″])    return @”iPhone 5″;
    if ([platform isEqualToString:@”iPhone5,2″])    return @”iPhone 5 (GSM+CDMA)”;
    
    if ([platform isEqualToString:@”iPod1,1″])      return @”iPod Touch (1 Gen)”;
    if ([platform isEqualToString:@”iPod2,1″])      return @”iPod Touch (2 Gen)”;
    if ([platform isEqualToString:@”iPod3,1″])      return @”iPod Touch (3 Gen)”;
    if ([platform isEqualToString:@”iPod4,1″])      return @”iPod Touch (4 Gen)”;
    if ([platform isEqualToString:@”iPod5,1″])      return @”iPod Touch (5 Gen)”;
    
    if ([platform isEqualToString:@”iPad1,1″])      return @”iPad”;
    if ([platform isEqualToString:@”iPad1,2″])      return @”iPad 3G”;
    if ([platform isEqualToString:@”iPad2,1″])      return @”iPad 2 (WiFi)”;
    if ([platform isEqualToString:@”iPad2,2″])      return @”iPad 2″;
    if ([platform isEqualToString:@”iPad2,3″])      return @”iPad 2 (CDMA)”;
    if ([platform isEqualToString:@”iPad2,4″])      return @”iPad 2″;
    if ([platform isEqualToString:@”iPad2,5″])      return @”iPad Mini (WiFi)”;
    if ([platform isEqualToString:@”iPad2,6″])      return @”iPad Mini”;
    if ([platform isEqualToString:@”iPad2,7″])      return @”iPad Mini (GSM+CDMA)”;
    if ([platform isEqualToString:@”iPad3,1″])      return @”iPad 3 (WiFi)”;
    if ([platform isEqualToString:@”iPad3,2″])      return @”iPad 3 (GSM+CDMA)”;
    if ([platform isEqualToString:@”iPad3,3″])      return @”iPad 3″;
    if ([platform isEqualToString:@”iPad3,4″])      return @”iPad 4 (WiFi)”;
    if ([platform isEqualToString:@”iPad3,5″])      return @”iPad 4″;
    if ([platform isEqualToString:@”iPad3,6″])      return @”iPad 4 (GSM+CDMA)”;
    
    if ([platform isEqualToString:@”i386″])         return @”Simulator”;
    if ([platform isEqualToString:@”x86_64″])       return @”Simulator”;
    
    return platform;
}

moving view when keyboard pops up..

CGFloat animatedDistance;

static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;

static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;

static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;

static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;

static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;

 

 

 

#pragma mark Textfield Delegates

– (BOOL)textFieldShouldReturn:(UITextField *)textField

{

[textField resignFirstResponder];

return YES;

}

 

 

– (void)textFieldDidBeginEditing:(UITextField *)textField

{

   //ErrorMsg.text = @””;

    CGRect textFieldRect =

[self.view.window convertRect:textField.bounds fromView:textField];

    CGRect viewRect =

[self.view.window convertRect:self.view.bounds fromView:self.view];

 

CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height;

    CGFloat numerator =

midline – viewRect.origin.y

– MINIMUM_SCROLL_FRACTION * viewRect.size.height;

    CGFloat denominator =

(MAXIMUM_SCROLL_FRACTION – MINIMUM_SCROLL_FRACTION)

* viewRect.size.height;

    CGFloat heightFraction = numerator / denominator;

 

if (heightFraction < 0.0)

    {

        heightFraction = 0.0;

    }

    else if (heightFraction > 1.0)

    {

        heightFraction = 1.0;

    }

 

UIInterfaceOrientation orientation =

[[UIApplication sharedApplication] statusBarOrientation];

    if (orientation == UIInterfaceOrientationPortrait ||

        orientation == UIInterfaceOrientationPortraitUpsideDown)

    {

        animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);

    }

    else

    {

        animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);

    }

 

CGRect viewFrame = self.view.frame;

    viewFrame.origin.y -= animatedDistance;

    

    [UIView beginAnimations:nil context:NULL];

    [UIView setAnimationBeginsFromCurrentState:YES];

    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];

    

    [self.view setFrame:viewFrame];

    

    [UIView commitAnimations];

}

 

– (void)textFieldDidEndEditing:(UITextField *)textField

{

    if (textField==tfEmail) {

      BOOL boolValidEmail=  [self NSStringIsValidEmail:tfEmail.text];

        if (!boolValidEmail) {

            

            [[[UIAlertView alloc]initWithTitle:@”Email alert” message:@”Invalid Email format” delegate:self cancelButtonTitle:@”Ok” otherButtonTitles:nil, nil]show ];

            registerBtn.enabled=NO;

 

        }

    }

    

    

    if (textField==tfConfirmEmail) {

        

        if (tfEmail.text!=tfConfirmEmail.text ) {

            [[[UIAlertView alloc]initWithTitle:@”Email alert” message:@”Emails doesn’t match” delegate:self cancelButtonTitle:@”Ok” otherButtonTitles:nil, nil]show ];

            registerBtn.enabled=NO;

 

        }

    }

    

    

    

    CGRect viewFrame = self.view.frame;

    viewFrame.origin.y += animatedDistance;

    

    [UIView beginAnimations:nil context:NULL];

    [UIView setAnimationBeginsFromCurrentState:YES];

    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];

    [self.view setFrame:viewFrame];

    [UIView commitAnimations];

    

    

    

}