- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有用作可拖动对象的 UIImageView
,它们位于 NSArray
中,所以在拖动它们时它们工作正常,但我想要的是当我拖动时它们并完成拖动方法,而不是将图像放入 UIImageView
我只想在拖动完成时用自定义图像替换它。所以我的问题是,如果我删除 NSArray
并将其设为仅 IF 语句,它可以正常工作但只拍摄一张图像,如果我将其放入 NSArray
中,如下面的代码所示只拍摄最后一张图片 (Close2) 并且不附加它
UIImage+Stuff.h
#import <UIKit/UIKit.h>
@interface UIImage (Stuff)
//
// return an UIImage from a CALayer
//
+ ( UIImage* ) grabImage:(CALayer*)layer;
@end
UIImage+Stuff.m
#import "UIImage+Stuff.h"
@implementation UIImage (Stuff)
+ ( UIImage* ) grabImage:(CALayer*)layer
{
UIGraphicsBeginImageContext ( layer.frame.size );
[ layer renderInContext:UIGraphicsGetCurrentContext() ];
UIImage *grab = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return grab;
}
@end
主游戏VC.h
@class APChartObject;
//
// drag status
//
typedef enum {
tDragStatusBegin = 0,
tDragStatusEnd,
tDragStatusIntersectIn,
tDragStatusIntersectOut
} tDragStatus;
@interface MainGameVC : UIViewController
@property (nonatomic, strong) IBOutletCollection(UIImageView) NSArray *TopMenuImages;
//top menu scroll views
@property (nonatomic, retain) IBOutlet UIScrollView *TopMenuViewer;
@property (nonatomic, retain) IBOutlet UIScrollView *scrollview;
//drag and drop
@property (nonatomic, strong) IBOutlet UIView *DropView;
@property (nonatomic, strong) UIImageView *dragObject;
@property (nonatomic, strong) IBOutlet UIScrollView *cart;
@property (nonatomic, assign) tDragStatus dragging;
@property (nonatomic, strong) APChartObject *selectedModel;
// all tools
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectBox;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectSand;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectSoil;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectWater;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectWheat;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectCorn;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectGarlic;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectLettuse;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectOnion;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectSugercane;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectTomato;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectCucumber;
@property (weak, nonatomic) IBOutlet UIImageView *DragedObjectBeans;
@end
MainGameVC.m
#import "UIImage+Stuff.h"
@interface MainGameVC ()
{
UIImageView *_selectedView;
CGPoint _startPoint;
int selectedViewTag;
}
@end
- (void)viewDidLoad
{
// drag and drop touch
UIPanGestureRecognizer *DragAndDrop = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panDetected:)];
[self.TopMenuViewer addGestureRecognizer:DragAndDrop];
NSArray *imageViewArray = [NSArray arrayWithObjects:DragedObjectWheat,DragedObjectCorn,DragedObjectOnion, nil];
for(UIImageView *image in imageViewArray)
{
UIPanGestureRecognizer *DragAndDrop2 = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panDetected:) ];
[DragAndDrop2 setMinimumNumberOfTouches:1];
[image addGestureRecognizer:DragAndDrop2];
image.userInteractionEnabled = YES;
}
}
//+---------------------------------------------------------------------------+
#pragma mark - View exchange
// +---------------------------------------------------------------------------+
//
// make the tricks.
// Add a subview with the screenshot of selected and move around the screen
//
- ( void) cloneViewWithCenter:(CGPoint)point image:(UIImage*)grab ImageTag:(int)ToolTag
{
if ( _selectedView ) [ _selectedView removeFromSuperview ];
selectedViewTag = ToolTag;
_selectedView = [[ UIImageView alloc ] initWithImage:grab ];
_selectedView.frame = CGRectMake(point.x, point.y, grab.size.width, grab.size.height);
_selectedView.userInteractionEnabled = YES;
[ self.view addSubview:_selectedView ];
UIPanGestureRecognizer *pan = [[ UIPanGestureRecognizer alloc ] initWithTarget:self action:@selector(moveObject:) ];
[ pan setMinimumNumberOfTouches:1 ];
[ _selectedView addGestureRecognizer:pan ];
}
// +---------------------------------------------------------------------------+
#pragma mark - Refresh
// +---------------------------------------------------------------------------+
//
// refresh loop
//
- (void) refreshView
{
[UIView animateWithDuration:0.2 animations:^
{
CGRect r = _selectedView.frame;
switch ( _dragging ) {
case tDragStatusBegin:
r.size.width *= 1;
r.size.height *= 1;
break;
case tDragStatusEnd:
r.size.width /= 1;
r.size.height /= 1;
break;
case tDragStatusIntersectIn:
r.size.width = 1;
r.size.height = 1;
[ self finishDrag ];
break;
case tDragStatusIntersectOut:
_selectedView.center = _startPoint;
break;
}
_selectedView.frame = r;
} completion:^(BOOL finished)
{
if ( _dragging == tDragStatusIntersectOut )
_selectedView.hidden = YES;
}];
}
//
// end drag
//
- (void) finishDrag
{
UIImageView *Tool;
UIImage *ReplacedPhoto;
UIImageView *imageView;
switch (selectedViewTag)
{
case 1:
{
logic for image tag 1
break;
}
case 2:
{
logic for image tag 2
break;
}
Tool.userInteractionEnabled = YES;
[self appendView:Tool];
}
//
// check for insertion in cart (or not)
//
- (void) checkForIntersection
{
//
// ABS coords.
//
CGRect childRect = [ self.view convertRect:_selectedView.frame fromView:nil ];
CGRect cartRect = [ self.view convertRect:_cart.frame fromView:nil ];
if ( CGRectIntersectsRect ( childRect, cartRect ))
{
self.dragging = tDragStatusIntersectIn;
}
else
{
self.dragging = tDragStatusIntersectOut;
}
}
- (void) refreshCart
{
[ _cart setContentOffset:CGPointMake(_cart.contentOffset.x, 0) animated:YES ];
}
// +---------------------------------------------------------------------------+
#pragma mark - Pan gesture
// +---------------------------------------------------------------------------+
- ( void ) panDetected:(UIPanGestureRecognizer*)gesture
{
CGPoint pInView = [ gesture locationInView:self.view ];
//CGSize pSize = gesture.view.frame.size;
if ( gesture.state == UIGestureRecognizerStateBegan )
{
_startPoint = pInView;
UIImage *grab = [UIImage grabImage: gesture.view.layer];
ToolTag = gesture.view.tag ;
for (int i = 0; i>ToolTag; i++)
{
i = i+1;
ToolTag = i;
}
//
// centering view
//
//pInView.x = pInView.x - pSize.width/2;
//pInView.y = pInView.y - pSize.height/2;
[ self cloneViewWithCenter:pInView image:grab ImageTag:ToolTag ];
self.dragging = tDragStatusBegin;
}
else if ( gesture.state == UIGestureRecognizerStateChanged )
{
[ self moveObject:gesture ];
}
else if ( gesture.state == UIGestureRecognizerStateEnded )
{
self.dragging = tDragStatusEnd;
[ self checkForIntersection ];
}
}
//
// move draggable view around
//
- (void) moveObject:(UIPanGestureRecognizer *)pan
{
_selectedView.center = [ pan locationInView:_selectedView.superview ];
}
// +---------------------------------------------------------------------------+
#pragma mark - Setter
// +---------------------------------------------------------------------------+
- (void)setDragging:(tDragStatus)dragging
{
_dragging = dragging;
[ self refreshView ];
}
// +---------------------------------------------------------------------------+
#pragma mark - Chart view
// +---------------------------------------------------------------------------+
//
// recursively append view to scrollview.
// If position already contains a view, shift and retry.
//
- (void) appendView:(id)view
{
[ _cart addSubview:view ];
[ self performSelector:@selector(refreshCart) withObject:nil afterDelay:0 ];
}
@end
最佳答案
在您的头文件中声明一个属性来保存您的 ImageView ,然后将它们连接到界面构建器中。
@interface YourViewController : UIViewController
@property (nonatomic, strong) IBOutletCollection(UIImageView) NSArray *imageViews;
//...
@end
现在在界面构建器中,您需要将所有 imageView 连接到这个新属性。
现在您需要使用 imageViews
集合。您甚至可以手动标记图像,稍后可用于检查拖动了哪个图像。
for (UIImageView *imageView in self.imageViews) {
if (imageView.tag == 1){
// .. Logic for image with tag 1
}
elseif (imageView.tag == 2){
// .. Logic for image with tag 2
}
}
关于ios - 如何从 NSArray 中选择一个 UIImgeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27636664/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!