user3182143 user3182143 - 5 months ago 26
Objective-C Question

UITextView inside the UIImageView

I have UIImageView.If i tap the imageview it zoom in.if i CLICK or TOUCH anywhere inside the imageview i get the textview.So what happen is,if i touch bottom of Imageview,textview does not appear.Also after i touch and get the textview inside the imageview,if i touch below of the imageview it disappear the above textview.Simultaneously i want to save the data of textview content into SQLite database without using save button.I want to save all textview text in sqlite database as well as it should be in one row(in textview column-text1,text2,text3).

Below .H coding

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import <CoreLocation/CoreLocation.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
#import <sqlite3.h>
#import "SqliteDBOne.h"
#import "LocationModel.h"
#import "BusinessModeOne.h"
@interface CameraGalleryViewController : UIViewController<UIGestureRecognizerDelegate,UIImagePickerControllerDelegate,UITextViewDelegate,CLLocationManagerDelegate,UITextFieldDelegate,UINavigationControllerDelegate>
{
SqliteDBOne *manage;
UIView *dynamicView;
UIImageView *dynamicImg;
UITextView *textview;
float xvalue;
float yvalue;
CGFloat animatedDistance;
}


.M part

#import "CameraGalleryViewController.h"
@interface CameraGalleryViewController ()
@end
@implementation CameraGalleryViewController
@synthesize cameragalleryimage,swi,textfld,locationLabel,dateLabel,timeLabel,locationManager,array_Image;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
manage =[SqliteDBOne shareOne];
//[manage createDB];
[SqliteDBOne createDBOne];
[self tapdetected1];

//DATE LABEL
NSDate* date = [NSDate date];
NSDateFormatter* formatterDate = [[NSDateFormatter alloc] init];
[formatterDate setDateFormat:@"dd-MM-yyyy"];
NSString *strDate = [formatterDate stringFromDate:date];
dateLabel.text=strDate;

//TIME LABEl
NSDate* date1 = [NSDate date];
NSDateFormatter* formatterTime = [[NSDateFormatter alloc] init];
[formatterTime setDateFormat:@"HH:mm:ss"];
NSString* strTime = [formatterTime stringFromDate:date1];
timeLabel.text=strTime;

array_Image=[[NSMutableArray alloc]init];

[self startSignificantChangeUpdates];

}
- (void)viewWillAppear:(BOOL)animated
{
UITapGestureRecognizer *tapgesture1 =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapdetected1)];
tapgesture1.numberOfTapsRequired =1;
tapgesture1.numberOfTouchesRequired =1;
cameragalleryimage.userInteractionEnabled =YES;
[cameragalleryimage addGestureRecognizer:tapgesture1];


UITapGestureRecognizer *tapgesture2 =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapdetected2)];
tapgesture2.numberOfTouchesRequired=1;
tapgesture2.numberOfTapsRequired=1;
cameragalleryimage.userInteractionEnabled =YES;
[cameragalleryimage addGestureRecognizer:tapgesture2];


UITapGestureRecognizer *tapgesture3 =[[UITapGestureRecognizer alloc]initWithTarget:self
action:@selector(tapdetected3)];
tapgesture3.numberOfTapsRequired =1;
tapgesture3.numberOfTouchesRequired =1;
cameragalleryimage.userInteractionEnabled =YES;
[cameragalleryimage addGestureRecognizer:tapgesture3];
}
-(void)tapdetected1
{
UIImagePickerController *picker =[[UIImagePickerController alloc]init];
picker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;
picker.delegate =self;
[self presentViewController:picker animated:NO completion:nil];
}
-(void)tapdetected2
{
UIImagePickerController *picker = [[UIImagePickerController alloc]init];
picker.sourceType =UIImagePickerControllerSourceTypeCamera;
picker.delegate =self;
[self presentViewController:picker animated:NO completion:nil];
}
-(void)tapdetected3
{
//For dynamically creating view
dynamicView =[[UIView alloc]initWithFrame:CGRectMake(10, 100, 280, 260)];
dynamicView.backgroundColor=[UIColor whiteColor];
[self.view addSubview:dynamicView];
//For dynamically creating imageview
dynamicImg =[[UIImageView alloc]init];
dynamicImg.frame=CGRectMake(10, 100, 280, 260);
[dynamicImg setUserInteractionEnabled:YES];
dynamicImg.image =cameragalleryimage.image;
[dynamicView addSubview:dynamicImg];

UITapGestureRecognizer *tapgesture4 =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapdetected4)];
tapgesture4.numberOfTapsRequired=1;
tapgesture4.numberOfTouchesRequired=1;
dynamicImg.userInteractionEnabled =YES;
[dynamicImg addGestureRecognizer:tapgesture4];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch =[[event allTouches]anyObject];
CGPoint touchPoint = [touch locationInView:dynamicImg];
NSLog(@"Touch x :%f y: :%f",touchPoint.x,touchPoint.y);
xvalue =touchPoint.x;
yvalue =touchPoint.y;
}
-(void)tapdetected4
{
if (xvalue > 145.0)
{
xvalue = 145.00;
}
textview =[[UITextView alloc]initWithFrame:CGRectMake(xvalue, yvalue, 130, 40)];
[textview setDelegate:self];
[[textview layer] setBorderColor:[[UIColor grayColor] CGColor]];
[[textview layer] setBorderWidth:2.3];
[[textview layer] setCornerRadius:15];
[dynamicImg addSubview:textview];
}

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//cameragalleryimage.image =[info objectForKey:UIImagePickerControllerOriginalImage];
UIImage *image=[info objectForKey:@"UIImagePickerControllerOriginalImage"];
cameragalleryimage.image=image;
[array_Image addObject:image];
picker.delegate =self;
[picker dismissViewControllerAnimated:NO completion:nil];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[picker dismissViewControllerAnimated:NO completion:nil];
}
-(void)textViewDidBeginEditing:(UITextField *)textView
{
CGRect textViewRect =
[self.view.window convertRect:textView.bounds fromView:textView];
CGRect viewRect =
[self.view.window convertRect:self.view.bounds fromView:self.view];
CGFloat midline = textViewRect.origin.y + 0.5 * textViewRect.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;
}
animatedDistance = floor(PORTRAIT_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)textViewDidEndEditing:(UITextField *)textView
{
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];
}
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;
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
{
//FOR ASSIGINING SPACE AND LENGTH FOR TEXT VIEW WITH CONDITION
if(textView.text.length >=100)
{
[textView resignFirstResponder];
return NO;
}
if([text rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]].location == NSNotFound)
{
return YES;
}
[textView resignFirstResponder];
return NO;
}

-(void)startSignificantChangeUpdates
{
if ([CLLocationManager locationServicesEnabled])
{
if (!self.locationManager)
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
[self.locationManager startMonitoringSignificantLocationChanges];
}
}
-(void)stopSignificantChangesUpdates
{
[self.locationManager stopUpdatingLocation];
self.locationManager = nil;
}

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *location = [locations lastObject];
CLGeocoder *geocoder =[[CLGeocoder alloc]init];
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks,NSError *error)
{
CLPlacemark *placemark = placemarks[0];
NSDictionary *addressDictionary =[placemark addressDictionary];
NSString *city = addressDictionary[(NSString *)kABPersonAddressCityKey];
NSString *state = addressDictionary[(NSString *)kABPersonAddressStateKey];
NSString *street=addressDictionary[(NSString *)kABPersonAddressStreetKey];
NSString *country = placemark.country;
locationLabel.text=[NSString stringWithFormat:@"%@ %@ %@ %@",street,city,state,country];
}];
[self stopSignificantChangesUpdates];
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
- (IBAction)switchaction:(id)sender
{
if(swi.isOn)
{
[self tapdetected1];
}
else
{
[self tapdetected2];
}


}

-(void)prepareDatabase
{
NSMutableArray *arrayTotalImage =[[NSMutableArray alloc]init];
for (UIImage *img in array_Image)
{
NSString *str =[BusinessModeOne getSavedPhotoPath:img];
[arrayTotalImage addObject:str];
}
NSLog(@"%@",arrayTotalImage);
if ([arrayTotalImage count] ==0)
{
BusinessModeOne *businessDBOne = [[BusinessModeOne alloc]init];
businessDBOne.txtfldstrOne =textfld.text;
businessDBOne.txtviewstrOne =textview.text;
businessDBOne.arrayOne=nil;
businessDBOne.strLocationOne=locationLabel.text;
businessDBOne.strDateOne=dateLabel.text;
businessDBOne.strTimeOne=timeLabel.text;
[SqliteDBOne insertDataintoSqliteOne:businessDBOne];
}
else
{
for (int i=0; i<[arrayTotalImage count]; i++)
{
BusinessModeOne *businessDBOne =[[BusinessModeOne alloc]init];
businessDBOne.txtfldstrOne=textfld.text;
NSLog(@"the textfield is == %@",businessDBOne.txtfldstrOne);
businessDBOne.txtviewstrOne=textview.text;
NSLog(@"the textview is ==%@", businessDBOne.txtviewstrOne);
businessDBOne.arrayOne =[arrayTotalImage objectAtIndex:i];
businessDBOne.strLocationOne=locationLabel.text;
NSLog(@"the location is == %@",businessDBOne.strLocationOne);
businessDBOne.strDateOne=dateLabel.text;
NSLog(@"the date is== %@", businessDBOne.strDateOne);
businessDBOne.strTimeOne=timeLabel.text;
NSLog(@"the time is ==%@",businessDBOne.strTimeOne);
[SqliteDBOne insertDataintoSqliteOne:businessDBOne];
}
}
}
-(IBAction)backbutton:(id)sender
{
[self.navigationController popToRootViewControllerAnimated:YES];
[self prepareDatabase];
}

Answer

just replace your coding

-(void)tapdetected3
 {

 //For dynamically creating imageview
 dynamicImg =[[UIImageView alloc]init];
 dynamicImg.frame=CGRectMake(10, 100, 280, 260);
 [dynamicImg setUserInteractionEnabled:YES];
 dynamicImg.image =cameragalleryimage.image;
 [self.view  addSubview:dynamicImg];   //add the image view to self.view

 UITapGestureRecognizer *tapgesture4 =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapdetected4)];
 tapgesture4.numberOfTapsRequired=1;
 tapgesture4.numberOfTouchesRequired=1;
 dynamicImg.userInteractionEnabled =YES;
 [dynamicImg addGestureRecognizer:tapgesture4];
 }