We have launched 3D framing app on AppStore

iFrame is 3D photo frame creator by which you can transform you photo frame in 3D effect in both vertical and horizontal direction. Also, you can rotate and zoom the frame.

Where you can use iFrame
✔ You can check how your photo frame will look on your bedroom wall. By placing your 3D frame on your wall.
✔ While buying carpets, drawings you can check how they will look on your wall.
✔ You can place your photo frame in office of famous persons like office of Mr. Obama, Drawing room of Queen Elizabeth 🙂
✔ You can put your photo frame on some table.

Features
☛ 25 Awesome Photo frames included in app.
☛ 25 best backgrounds included in app. You may used your own background.
☛ You can zoom-rotate your photo inside photo frame.
☛ Easy and Quick transform of 3D movement.
☛ You can share your photo frame with family and friends by sharing on Facebook and Twitter.
☛ Save to Photo Library.
☛ Email photo frame.
☛ Use help screen for more guidance.

5

Download iFrame 3D from AppStore

Error 403 while getFollowers : Twitter iPhone MGTwitterEngine

I was trying to access the followers list from my twitter account by using MGTwitterEngine. But it is giving error. Here is all step what i have done to fixed it.

1. In MGTwitterEngine.m change #define TWITTER_DOMAIN @”twitter.com” To #define TWITTER_DOMAIN @”api.twitter.com/1″

and  #define USE_LIBXML 0 to #define USE_LIBXML 1 (Most of the people are not doing this and getting no response)

2. In your working class.h add #import “MGTwitterEngine.h” and add its delegate <MGTwitterEngineDelegate>

3. In your working class.m add these methods:

#pragma mark TwitterEngineDelegate
– (void) requestSucceeded: (NSString *) requestIdentifier {
NSLog(@”Request %@ succeeded”, requestIdentifier);
}
– (void) requestFailed: (NSString *) requestIdentifier withError: (NSError *) error {
NSLog(@”Request %@ failed with error: %@”, requestIdentifier, error);
}
– (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)connectionIdentifier {

}
– (void)receivedObject:(NSDictionary *)dictionary forRequest:(NSString *)connectionIdentifier {

NSLog(@”Recieved Object: %@”, dictionary);
}
– (void)directMessagesReceived:(NSArray *)messages forRequest:(NSString *)connectionIdentifier {

NSLog(@”Direct Messages Received: %@”, messages);
}
// This method will call when you received all your followers. I have used one NSMutableArray “friendsList” to store all followers information. You can modify this according to your need.
– (void)userInfoReceived:(NSArray *)userInfo forRequest:(NSString *)connectionIdentifier {

NSLog(@”User Info Received: %@”, userInfo);

friendsList = [[NSMutableArray alloc]init];

for (NSDictionary *u in userInfo ) {

NSDictionary *followersDic = [[NSDictionary alloc]initWithDictionary:u];
[friendsList addObject:followersDic];
[followersDic release];
}
[self.tableView reloadData];
}

This is all what i have added in my class and then calling this method: [[GetAppDelegate() facebook] requestWithGraphPath:@”me/friends” andDelegate:self]; And it return all my followers list.

I hope this code will help to those who have scratching his head from some couple of hours 😉

!! Enjoy !!

Resize table cell according to text length

Some times we need to customize our table cell’s height according to text length. For long text we need to make a bigger cell and vice versa. Here is the method to do this:

1. define you table cell’s size and font:

#define CONST_Cell_height 50.0f
#define CONST_Cell_width 270.0f
#define CONST_textLabelFontSize     16
#define CONST_detailLabelFontSize   14

2. Here is the method to calculate table cell width:

– (int) heightOfCellWithTitle :(NSString*)titleText
andSubtitle:(NSString*)subtitleText
{
CGSize titleSize = {0, 0};
CGSize subtitleSize = {0, 0};

if (titleText && ![titleText isEqualToString:@””])
titleSize = [titleText sizeWithFont:[UIFont boldSystemFontOfSize:16]
constrainedToSize:CGSizeMake(CONST_Cell_width, 4000)
lineBreakMode:UILineBreakModeWordWrap];

if (subtitleText && ![subtitleText isEqualToString:@””])
subtitleSize = [subtitleText sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(CONST_Cell_width, 4000)
lineBreakMode:UILineBreakModeWordWrap];

descriptionLabelHeight = subtitleSize.height;

return titleSize.height + subtitleSize.height;
}

3. Use this in your table height for row:

– (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

NSString *title = @”Yor cell title”;
NSString *subtitle =@”Your cell subtitle”;

int height =  “some constant” + [self heightOfCellWithTitle:title andSubtitle:subtitle]; // some constant is used to adjust cell height. may be zero.

return (height < CONST_Cell_height ? CONST_Cell_height : height);

}

it will resize the table cell according to text size.

!! Enjoy !!

How to create a password-protected (encrypted) disk image in Mac OS X 10.3 or later

You can move files to or from an encrypted disk image as easily as you can from a non-encrypted disk image. Follow these steps to create an encrypted disk image:

  1. Open Disk Utility (/Applications/Utilities/).
  2. Mac OS X 10.4, 10.5 or later: Click the New Image button, or choose New > Blank Disk Image from the Disk Utility File menu.
    Mac OS X 10.3 through 10.3.9: Choose New from the Disk Utility Image menu.
  3. Enter a name in the Save As field. This name is used for the disk image (.dmg) file.
  4. Change the save destination if you wish to.
  5. Select a size for the image file from the Volume Size pop-up menu (Size in Mac OS X 10.3) .
  6. Choose a volume format if you don’t want to use the default Mac OS X Extended (Journaled).
  7. Choose an image format. You can use “sparse disk image” for a disk image that only uses as much space as it needs, rather than a set amount of space. If you’re not sure, use “read/write disk image” choice.
  8. Choose 128-bit AES (and/or 256-bit AES in Mac OS X 10.5 or later) from the Encryption pop-up menu to encrypt the image’s contents with a password. If you don’t choose an encryption, your new image won’t be encrypted.
  9. Click the Create button.
  10. Enter and verify a good password in the dialog window that appears. This password will be saved in your keychain by default, or you can deselect “Remember password (add to keychain)” if you don’t want that. You can store the password in the keychain both for convenience and for reducing risk of password loss.
  11. Click OK.

Important: If you forget the password, data stored in the encrypted disk image cannot be retrieved. If you have saved the password in the keychain file, the password will be available to you there.

 

!! Cheers !!

XCode4 hangs at “Attaching to ….”

Sometimes when you rename you app XCode4 hang while running app on simulator. And it stuck at “Attaching to ‘app name’ “. Here is the step how to fix it:

1. Clicking on the project name in the left pane (at the very top). This will bring up a new menu to the right, something like the project/ target editors in XCode4

2. Click on Target and Click on Build Settings up at the top.

3. Under Packaging make sure your product name is the same for every build, and equal to whatever it says it’s attaching to. Eg if XCode is Hanging at “Attaching to Lasso Tool” but your product name is “Alter Image” then it won’t build.

That was exactly my problem because I renamed my app half way through development.

!! Cheers !!

Masking of Image on another image

Here is a small core graphics method for masking of images:

 

– (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

CGContextRef mainViewContentContext;
CGColorSpaceRef colorSpace;

colorSpace = CGColorSpaceCreateDeviceRGB();

// create a bitmap graphics context the size of the image
mainViewContentContext = CGBitmapContextCreate (NULL, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);

// free the rgb colorspace
CGColorSpaceRelease(colorSpace);

CGImageRef maskingImage = [maskImage CGImage];
CGContextClipToMask(mainViewContentContext, CGRectMake(0, 0, maskImage.size.width, maskImage.size.height), maskingImage);
CGContextDrawImage(mainViewContentContext, CGRectMake(0, 0, image.size.width, image.size.height), self.CGImage);

// Create CGImageRef of the main view bitmap content, and then
// release that bitmap context
CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(mainViewContentContext);

// convert the finished resized image to a UIImage
UIImage *theImage = [UIImage imageWithCGImage:mainViewContentBitmapContext];
// image is retained by the property setting above, so we can
// release the original

CGContextRelease(mainViewContentContext);
CGImageRelease(mainViewContentBitmapContext);
maskingImage = nil;
CGImageRelease(maskingImage);
// return the image
return theImage;

}

For more detail about masking please checkout Quartz 2D developer guide:

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html

 

!! Enjoy !!

Limiting Zoom level in UIPinchGestureRecognizer

Sometimes when we are zooming image by using Pinch Gesture, we can’t handle the size of zooming. Here is a small code to do this.

The code below assumes there is an instance variable CGFloat lastScale and that a view has been set for the UIPinchGestureRecognizer.

– (void)handlePinchGesture:(UIPinchGestureRecognizer *)gestureRecognizer {

if([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
// Reset the last scale, necessary if there are multiple objects with different scales
lastScale = [gestureRecognizer scale];
}

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan ||
[gestureRecognizer state] == UIGestureRecognizerStateChanged) {

CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@”transform.scale”] floatValue];

// Constants to adjust the max/min values of zoom
const CGFloat kMaxScale = 2.0;
const CGFloat kMinScale = 1.0;

CGFloat newScale = 1 –  (lastScale – [gestureRecognizer scale]); // new scale is in the range (0-1)
newScale = MIN(newScale, kMaxScale / currentScale);
newScale = MAX(newScale, kMinScale / currentScale);
CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], newScale, newScale);
[gestureRecognizer view].transform = transform;

lastScale = [gestureRecognizer scale];  // Store the previous scale factor for the next pinch gesture call
}
}

!! Enjoy !!