我是新 iphone。在我小的应用程序,如何获取图像路径从照片库。下面的代码获取图像并放在 imageview 中使用此。
-(IBAction) selectimage{UIImagePickerController*picker=[[UIImagePickerController alloc] init];
picker.delegate=self;
picker.sourceType=UIImagePickerControllerSourceTypeSavedPhotosAlbum;[self presentModalViewController:picker animated:YES];[picker release];}-(void) imagePickerController:(UIImagePickerController*)UIPicker didFinishPickingMediaWithInfo:(NSDictionary*) info
{[UIPicker dismissModalViewControllerAnimated:YES];
imageview.image=[info objectForKey:"UIImagePickerControllerOriginalImage"];NSLog("Image Path=%@",imageview.image);}
其成功放到 Imageview。但我不能得到其 imagepath。我使用的 nslog("%@",imageview.image) ;它显示"图像路径 ="在控制台中。如何获得它的路径,以及如何从照片库中检索的照片。任何机构帮助我。先谢谢了。
本文链接
准备工作:设置 调用相机的回调码 和 设置 调用照相机拍照后保存图片的位置,名称,及后缀名(图片类型)
private int xiangji=3;
private File sdcardTempFile = new File("/mnt/sdcard/", "tmp_pic_" + SystemClock.currentThreadTimeMillis() + ".jpg");
在button监听器中调用相机:
//调用系统照相机拍照 bt4.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); Uri u=Uri.fromFile(sdcardTempFile); intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0); intent.putExtra(MediaStore.EXTRA_OUTPUT, u); intent.putExtra("return-data", true); startActivityForResult(intent, xiangji); } });
回调函数中接收图片:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { System.out.println("requestCode"+requestCode); switch (requestCode){ case 2: Uri tuku_uri = data.getData(); System.out.println(tuku_uri.getPath()); ContentResolver tuku_cr = this.getContentResolver(); try { bmp = BitmapFactory.decodeStream(tuku_cr.openInputStream(tuku_uri)); MCShareLaunchShareHelper.shareContentWithBitmap("测试分享本地图片", bmp, "your share url", "", MoxunActivity.this); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case 3: try { Uri xiangji_uri = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), sdcardTempFile.getAbsolutePath(), null, null)); System.out.println(xiangji_uri.getPath()); ContentResolver xiangji_cr = this.getContentResolver(); bmp = BitmapFactory.decodeStream(xiangji_cr.openInputStream(xiangji_uri)); MCShareLaunchShareHelper.shareContentWithBitmap("测试照相机图片", bmp, "your share url", "", MoxunActivity.this); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; } } }注意事项:调用相机和调用图库有所不同,就是相机是横屏显示,所以拍照完成后,你的Activity会重绘,这时你的回调函数就接收不到刚才拍到的照片,所以需要在AndroidManifest.xml中配置你的Activiy,禁用重绘
<!-- android:screenOrientation="landscape" 横屏 android:screenOrientation="portrait" 竖屏 android:configChanges="orientation|keyboardHidden" 旋转屏幕后不重绘Activity -->
<activity android:configChanges="orientation|keyboardHidden" android:name="MCShareAppActivity" android:screenOrientation="portrait" />
1.概述
UIKit直接将动画集成到UIView类中,实现简单动画的创建过程。UIView类定义了几个内在支持动画的属性声明,当这些属性发生改变时,视图为其变化过程提供内建的动画支持。
执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码包装到一个代码块中。
2.UIView动画具体创建方法
- (void)buttonPressed
{
// 交换本视图控制器中2个view位置
[self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
//UIView开始动画,第一个参数是动画的标识,第二个参数附加的应用程序信息用来传递给动画代理消息
[UIView beginAnimations:@"View Flip" context:nil];
//动画持续时间
[UIView setAnimationDuration:1.25];
//设置动画的回调函数,设置后可以使用回调方法
[UIView setAnimationDelegate:self];
//设置动画曲线,控制动画速度
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
//设置动画方式,并指出动画发生的位置
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
//提交UIView动画
[UIView commitAnimations];
}
- (void)viewDidLoad
{
[super viewDidLoad];
//主要功能通过UIView动画完成2个试图控制器的切换
self.blueController = [[BlueViewController alloc] initWithNibName:nil bundle:nil];
//设置导航控制器view的大小占整个屏幕
[self.blueController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width , self.view.frame.size.height)];
self.yellowController = [[YellowController alloc]initWithNibName:nil bundle:nil ];
[self.yellowController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width , self.view.frame.size.height)];
//将2个控制器view插入到目前导航控制器视图上,yellowController后插入,显示在最前面
[self.view insertSubview:self.blueController.view atIndex:0];
[self.view insertSubview:self.yellowController.view atIndex:1];
//创建导航控制器右按钮,按钮名字叫next
//添加buttonPressed 事件
self.rightBarItem = [[UIBarButtonItem alloc] initWithTitle:@"next" style:UIBarButtonItemStylePlain target:self action:@selector(buttonPressed)];
//将按钮添加到导航控制器默认右按钮上
self.navigationItem.rightBarButtonItem = self.rightBarItem;
}
有个问题:如果动画不放在按钮事件中,直接放到viewDidLoad里,程序首先执行这个controller,这时动画是不会显示的。
原因:出现这个问题是因为开机时候系统有个动画,系统动画和这个动画重复了。
解决方案:
1。将动画写在按钮事件中
2。利用定时器。
转:UIView动画更具体讲解;http://wsqwsq000.iteye.com/blog/1189183
areAnimationsEnabled
返回一个布尔值表示动画是否结束。
+ (BOOL)areAnimationsEnabled
返回值
如果动画结束返回YES,否则NO。
beginAnimations:context:
开始一个动画块
+ (void)beginAnimations:(NSString *)animationID context:(void *)context
参数
animationID
动画块内部应用程序标识用来传递给动画代理消息-这个选择器运用setAnimationWillStartSelector:和setAnimationDidStopSelector: 方法来设置。
context
附加的应用程序信息用来传递给动画代理消息-这个选择器使用setAnimationWillStartSelector: 和setAnimationDidStopSelector: 方法。
讨论
这个值改变是因为设置了一些需要在动画块中产生动画的属性。动画块可以被嵌套。如果在没有在动画块中调用那么setAnimation类方法将什么都不做。使用 beginAnimations:context:来开始一个动画块并用commitAnimations类方法来结束一个动画块。
commitAnimations
结束一个动画块并开始当他在动画块外时。
+ (void)commitAnimations
讨论
如果当前的动画块是最外层的动画块,当应用程序返回到循环运行时开始动画块。动画在一个独立的线程中所有应用程序不会中断。使用这个方法,多个动画可以被实现。查看setAnimationBeginsFromCurrentState:来了解如果开始一个动画当另外一个动画在播放的时候。
layerClass
返回类用来创建这一个本类的layer实例对象。
+ (Class)layerClass
返回值
一个用来创建视图layer的类
讨论
重写子类来指定一个自定义类用来显示。当在创建视图layer时候调用。默认的值是CALayer类对象。
setAnimationBeginsFromCurrentState
:
设置动画从当前状态开始播放。
+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState
参数
fromCurrentState
YES如果动画需要从他们当前状态开始播放。否则为NO。
讨论
如果设置为YES那么当动画在运行过程中,当前视图的位置将会作为新的动画的开始状态。如果设置为NO,当前动画结束前新动画将使用视图最後状态的位置作 为开始状态。这个方法将不会做任何事情如果动画没有运行或者没有在动画块外调用。使用beginAnimations:context:类方法来开始并用 commitAnimations类方法来结束动画块。默认值是NO。
setAnimationCurve
:
设置动画块中的动画属性变化的曲线。
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve
讨论
动画曲线是动画运行过程中相对的速度。如果在动画块外调用这个方法将会无效。使用 beginAnimations:context:类方法来开始动画块并用commitAnimations来结束动画块。默认动画曲线的值是UIViewAnimationCurveEaseInOut。
setAnimationDelay:
在动画块中设置动画的延迟属性(以秒为单位)
+ (void)setAnimationDelay:(NSTimeInterval)delay
讨论
这个方法在动画块外调用无效。使用beginAnimations:context: 类方法开始一个动画块并用commitAnimations类方法结束动画块。默认的动画延迟是0.0秒。
setAnimationDelegate:
设置动画消息的代理。
+ (void)setAnimationDelegate:(id)delegate
参数
delegate
你可以用setAnimationWillStartSelector:和setAnimationDidStopSelector: 方法来设置接收代理消息的对象。
讨论
这个方法在动画块外没有任何效果。使用beginAnimations:context:类方法开始一个动画块并用commitAnimations类方法结束一个动画块。默认值是nil
setAnimationDidStopSelector:
设置消息给动画代理当动画停止的时候。
+ (void)setAnimationDidStopSelector:(SEL)selector
参数
selector
当动画结束的时候发送给动画代理。默认值是NULL。这个选择者须有下面方法的签名:animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context。
animationID
一个应用程序提供的标识符。和传给beginAnimations:context: 相同的参数。这个参数可以为空。
finished
如果动画在停止前完成那返回YES;否则就是NO。
context
一个可选的应用程序内容提供者。和beginAnimations:context: 方法相同的参数。可以为空。
讨论
这个方法在动画块外没有任何效果。使用beginAnimations:context: 类方法来开始一个动画块并用commitAnimations类方法结束。默认值是NULL。
setAnimationDuration:
设置动画块中的动画持续时间(用秒)
+ (void)setAnimationDuration:(NSTimeInterval)duration
参数
duration
一段动画持续的时间。
讨论
这个方法在动画块外没有效果。使用beginAnimations:context: 类方法来开始一个动画块并用commitAnimations类方法来结束一个动画块。默认值是0.2。
setAnimationRepeatAutoreverses:
设置动画块中的动画效果是否自动重复播放。
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses
参数
repeatAutoreverses
如果动画自动重复就是YES否则就是NO。
讨论
自动重复是当动画向前播放结束後再重头开始播放。使用setAnimationRepeatCount: 类方法来指定动画自动重播的时间。如果重复数为0或者在动画块外那将没有任何效果。使用beginAnimations:context:类方法来开始一个动画块并用commitAnimations方法来结束一个动画块。默认值是NO。
setAnimationRepeatCount:
设置动画在动画模块中的重复次数
+ (void)setAnimationRepeatCount:(float)repeatCount
参数
repeatCount
动画重复的次数,这个值可以是分数。
讨论
这个属性在动画块外没有任何作用。使用beginA