【绘图案例-模拟ImageView Objective-C语言】

本文通过实例讲解了Objective-C中如何模拟UIImageView的init和initWithImage初始化方法,包括它们的区别,以及如何自定义一个HMImageView类实现相同功能。通过添加image属性、重绘和处理触摸事件,成功实现了图片显示和更换的效果。
摘要由CSDN通过智能技术生成

一、接下来,我们来模拟一下imageView,

通知

1.我们先来写一段儿简单的代码,然后我们再来说怎么着去做啊,

首先呢,imageView啊,它初始化,有两个方法:

1)init:

2)initWithImage:

这两个方法,有什么样儿的区别呢,知道吗,除了默认带不带图片以外,还有没有其他的区别,

initWithImage:创建出来的imageView,它默认是有大小的,

大小是什么,就是你图片的大小,

init,是没有frame的,

init,是x、y、宽、高、四个参数,都是0,

initWithImage:的话,x、y、是(0,0),然后呢,宽、高、就是你图片的宽、高、实际上,是有大小的啊,

2.我们来新建一个项目啊,

Name:06-模拟imageView

通知

然后呢,viewController里边儿,先来写一段儿简单的代码,

通知

需要一张图片素材,把这个me@2x.png,拖进来,

通知

UIImageView *imageView = [[UIImageView alloc] init];

通知

然后呢,给imageView设置frame,(0,0,200,200)

通知

imageView.frame = CGRectMake(0,0,200,200);

然后,给imageView设置图片,

imageView.image = [UIImage imageNamed:@“me”];

通知

然后,self.view addSubview:把imageView,加进来,

通知

[self.view addSubview:imageView];

通知

command + R,

通知

2.我们接下来,干什么,当我在点击屏幕的时候,我想让这张图片呢,换一下,换成另外一张图片,

我们再找一张图片啊,

通知

把这张图片拖进来,

通知

现在,有两张图片了,然后呢,当在这个Controller里边儿,当我点击屏幕的时候,把这段儿代码先选中、删掉啊,

通知

- touchBegan:啊,

通知

当我点击屏幕的时候,我想让这个imageView,换一张图片,

那我只需要给它的image属性,重新赋一张图片,就可以了,对吧,

通知

但是,我们好像在这一块儿,拿不到我们的image,

那我们就声明一个全局的,

通知

xWeak

通知

@property(nonatomic,weak)type *name;

通知

@property(nonatomic,weak)UIImageView *imageView;

通知

好,然后呢,让这个self的imageView,等于这个imageView,

self.imageView = imageView;

通知

然后呢,在touchesBegan:方法里边,让self.imageView的image属性,等于另外一张图片,

通知

本来是这样的,

当一个View超出屏幕时,你可以使用ScrollView或者HorizontalScrollView来解决这个问题。 如果你想拖动一个ImageView,并且希望它不会超出屏幕,你可以使用以下代码: ```java imageView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { // 手指按下时记录位置 lastX = event.getRawX(); lastY = event.getRawY(); break; } case MotionEvent.ACTION_MOVE: { // 移动的距离 float dx = event.getRawX() - lastX; float dy = event.getRawY() - lastY; // 获取imageView的参数 RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) v.getLayoutParams(); // 移动imageView lp.leftMargin += dx; lp.topMargin += dy; // 确定imageView不会超出屏幕 int screenWidth = getResources().getDisplayMetrics().widthPixels; int screenHeight = getResources().getDisplayMetrics().heightPixels; if (lp.leftMargin < 0) { lp.leftMargin = 0; } else if (lp.leftMargin + v.getWidth() > screenWidth) { lp.leftMargin = screenWidth - v.getWidth(); } if (lp.topMargin < 0) { lp.topMargin = 0; } else if (lp.topMargin + v.getHeight() > screenHeight) { lp.topMargin = screenHeight - v.getHeight(); } // 重新设置imageView的参数 v.setLayoutParams(lp); // 更新位置记录 lastX = event.getRawX(); lastY = event.getRawY(); break; } case MotionEvent.ACTION_UP: { // 手指抬起时不需要做任何事情 break; } } return true; } }); ``` 这个代码片段会允许你拖动ImageView,但是它不会被拖动超出屏幕。如果ImageView被拖动到了屏幕边缘,它会停在那里并且无法继续拖动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值