对于我的应用程序,我使用的是TableView并使用自定义的UITableViewCells.
我通过界面构建器而不是以编程方式自定义我的单元格 有没有办法在界面构建器中使我的自定义单元格的背景颜色成为渐变?
谢谢.
简而言之,我需要确切知道scrollview何时停止滚动.通过"停止滚动",我的意思是它不再移动而不被触摸的那一刻.
我一直在研究一个水平的UIScrollView子类(适用于iOS 4),其中包含选择标签.它的一个要求是它停止滚动到一定速度以下,以便更快地进行用户交互.它还应该捕捉到选项卡的开头.换句话说,当用户释放滚动视图并且其速度较低时,它会捕捉到一个位置.我实现了它并且它可以工作,但它有一个错误.
我现在拥有的:
scrollview是它自己的委托.每次调用scrollViewDidScroll:时,它都会刷新与速度相关的变量:
-(void)refreshCurrentSpeed
{
float currentOffset = self.contentOffset.x;
NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970];
deltaOffset = (currentOffset - prevOffset);
deltaTime = (currentTime - prevTime);
currentSpeed = deltaOffset/deltaTime;
prevOffset = currentOffset;
prevTime = currentTime;
NSLog(@"deltaOffset is now %f, deltaTime is now %f and speed is %f",deltaOffset,deltaTime,currentSpeed);
}
Run Code Online (Sandbox Code Playgroud)
然后根据需要继续捕捉:
-(void)snapIfNeeded
{
if(canStopScrolling && currentSpeed <70.0f && currentSpeed>-70.0f)
{
NSLog(@"Stopping with a speed of %f points per second", currentSpeed);
[self stopMoving];
float scrollDistancePastTabStart = fmodf(self.contentOffset.x, (self.frame.size.width/3));
float scrollSnapX = self.contentOffset.x …Run Code Online (Sandbox Code Playgroud) 如本回答所述,复制和交换习惯用法如下实现:
class MyClass
{
private:
BigClass data;
UnmovableClass *dataPtr;
public:
MyClass()
: data(), dataPtr(new UnmovableClass) { }
MyClass(const MyClass& other)
: data(other.data), dataPtr(new UnmovableClass(*other.dataPtr)) { }
MyClass(MyClass&& other)
: data(std::move(other.data)), dataPtr(other.dataPtr)
{ other.dataPtr= nullptr; }
~MyClass() { delete dataPtr; }
friend void swap(MyClass& first, MyClass& second)
{
using std::swap;
swap(first.data, other.data);
swap(first.dataPtr, other.dataPtr);
}
MyClass& operator=(MyClass other)
{
swap(*this, other);
return *this;
}
};
Run Code Online (Sandbox Code Playgroud)
通过将MyClass的值作为operator =的参数,可以通过复制构造函数或移动构造函数构造参数.然后,您可以安全地从参数中提取数据.这可以防止代码重复并有助于异常安全.
答案提到您可以在临时中交换或移动变量.它主要讨论交换.但是,交换(如果未由编译器优化)涉及三个移动操作,而在更复杂的情况下,还需要额外的额外工作.当你想要的时候,就是将临时文件移动到assign-to对象中.
考虑这个更复杂的例子,涉及观察者模式.在这个例子中,我手动编写了赋值运算符代码.重点是移动构造函数,赋值运算符和交换方法:
class MyClass : Observable::IObserver …Run Code Online (Sandbox Code Playgroud) 我必须开发与此计步器应用程序相同的功能
我已经非常详细地观察了这个计步器应用程序.
它不是一个完美的计步器应用程序.例如,如果您停留/坐在一个地方并握手,它还会检测步数和距离.
忽略这种理想和重力行为,因为在这个应用程序的说明中已经提到你应该绑你的iPhone,或者你应该把它放在口袋里计算步数.这样,我发现这个应用程序运行良好,它几乎可以检测到所有步骤.
我的问题是:我根据上面的逻辑开发了一个样本,但它没有达到那个水平.例如,有时它会同时检测2-3个步骤.有时它工作正常.
我的代码:
在viewDidLoad中:
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:0.2]
Run Code Online (Sandbox Code Playgroud)
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
const float violence = 1.2;
static BOOL beenhere;
BOOL shake = FALSE;
if (beenhere) return;
beenhere = TRUE;
if (acceleration.x > violence || acceleration.x < (-1* violence))
shake = TRUE;
if (acceleration.y > violence || acceleration.y < (-1* violence))
shake = TRUE;
if (acceleration.z > violence || acceleration.z < (-1* violence))
shake = TRUE;
if (shake) {
steps=steps+1;
}
beenhere …Run Code Online (Sandbox Code Playgroud) 最初,我认为static并且inline意味着以下功能:
警告:这是我以前认为的,不要认为这是正确的.
一个static函数只存在一次.使用它的一切都使用相同的功能.*
一个inline函数的内容,据推测,复制到调用函数.编译器实际上可能忽略了这一点,但是如果在非模板头文件中定义,则必须避免重复定义.
一个static inline功能,我仍然没有弄清楚这应该是什么意思.
*添加了注释,类模板有效地生成类,因此它们的静态内容对于每个派生类型是完全不同的.
我从C++ for Java Programmers一书中得到了这个印象(Mark Allen Weiss,ISBN 0-13-919424-X).在第2.1.6段,它说:
在某些情况下,进行函数调用的开销可能很大.例如,max2例程是微不足道的,因此可能只想简单地用main2逻辑上执行的代码替换main中的函数调用:...当然,这将牺牲良好的编程实践来提高速度.
为避免这种情况,可以使用内联指令.内联指令建议编译器应该生成避免函数定义开销的代码......
令人惊讶的是,我找不到任何关于static功能的信息.它可能在那里,但我在索引中找不到它.
但后来我找到了这个答案,似乎正好相反:
非静态内联函数声明在使用它的每个转换单元(源文件)中引用相同的函数.
和
如果它是静态的,则每个TU都有自己的函数版本,因此它有自己的静态局部变量副本.
这个答案似乎采取了不同的立场inline,同意我原来的解释:
inline准确传达了你想要的东西:"请为这个函数抑制ODR规则,这样每个翻译单元都可以(并且必须)提供它自己的函数定义副本".
但后来继续说一个inline函数可以内联(我假设这意味着重复到它被调用的每个地方)或合并在一起.
然后,编译器将内联对函数的调用,或者将来自不同TU的函数定义合并在一起(以便生成的函数在可执行文件中存在一次).
然后它还说声明一个函数static意味着将存在任意数量的函数:
另一方面,static告诉编译器在定义它的每个转换单元中生成函数,而不是共享它.因此,您最终会在生成的可执行文件中存在任意数量的技术上独立的函数.
我不确定,但它听起来像static函数不止一次存在并且inline函数,当编译器实际执行内联时,只存在一次.这与我以前的想法完全相反.
但最重要的是,这里有一堆关于单身人士的问题,其中声明了每个getInstance函数static:
因此,如果static函数确实存在多次,这实际上意味着将存在多个本地static单例对象,并且我看到的每个C++单例示例都是错误的,这似乎不太可能.
我不再理解了.一切似乎都暗示着别的东西.是什么static,inline以及,作为奖励:static inline真的意味着功能?
有没有办法给出一个符合某个协议的类作为参数?
我一开始尝试的是带着一点希望,这是:
-(NSString *) getKeyForMyProtocolClass(Class<MyProtocol>)aClass
Run Code Online (Sandbox Code Playgroud)
但那导致了
[aClass superclass];
Run Code Online (Sandbox Code Playgroud)
给出警告"实例方法'超类'找到而不是类方法'超类'".我对conformsToProtocol得到了同样的警告:
因为当参数是(Class)aClass时它没有给出这样的警告,所以Class <MyProtocol>实际上并不是Class类型.
我不应该发送NSObject <MyProtocol>,因为我需要根据类及其超类确定正确的密钥,并且只有在没有设置该密钥的情况下才创建和添加新对象.
我可以用conformsToProtocol检查,但是我必须返回一个非常糟糕的nil值.我宁愿在编译时停止这个问题.
简而言之,是否有符合协议的类的类型声明?
我无法弄清楚使用构造函数的东西JTable(TableModel dm).
我正在使用LinkedList来管理我的数据,为了显示它,我扩展了AbstractTableModel:
public class VolumeListTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private LinkedList<Directory> datalist;
private Object[] columnNames= {"ID", "Directory", "Wildcard"};
public VolumeListTableModel(){
}
public void setDatalist(LinkedList<Directory> temp){
this.datalist = temp;
}
public LinkedList<Directory> getDatalist(){
return (LinkedList<Directory>) this.datalist.clone();
}
public Object[] getColumnNames() {
return this.columnNames;
}
@Override
public int getColumnCount() {
return Directory.numCols;
}
@Override
public int getRowCount() {
return this.datalist.size();
}
@Override
public Object getValueAt(int row, int col) {
Directory temp …Run Code Online (Sandbox Code Playgroud) 嗨,我正在尝试为'UIButton'添加手势识别器.当我这样做时:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[self.LeftBottomSpaceBtn addGestureRecognizer:singleTap];
[singleTap requireGestureRecognizerToFail:doubleTap];
[singleTap release];
Run Code Online (Sandbox Code Playgroud)
它工作正常,但当我尝试将此手势添加到多个按钮时,它不起作用:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[self.LeftBottomSpaceBtn addGestureRecognizer:singleTap];
[self.LeftUpSpaceBtn addGestureRecognizer:singleTap];
[self.RightBUpSpaceBtn addGestureRecognizer:singleTap];
[self.LeftReturnBtn addGestureRecognizer:singleTap];
[self.RightReturnBtn addGestureRecognizer:singleTap];
[self.DeleteBtn addGestureRecognizer:singleTap];
[self.CapsBtn addGestureRecognizer:singleTap];
[singleTap requireGestureRecognizerToFail:doubleTap];
[singleTap release];
Run Code Online (Sandbox Code Playgroud)
那么我怎么能像添加'longPress'和'doubleTap'一样将相同的手势添加到多个按钮?
出于某种原因,以下代码给出了错误Symbol 'TemplateBase' could not be resolved.:
template <typename T>
class TemplateBase
{
TemplateBase(std::map<std::string, T>::const_iterator anIterator)
{ }
};
class SubClass : public TemplateBase<int>
{
SubClass(std::map<std::string, int>::const_iterator anIterator) :
TemplateBase<int>(anIterator) //Error: Symbol 'TemplateBase' could not be resolved.
{ }
};
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我删除::const_iterator并且仅std::map<std::string, int>剩下时,没有出现错误:
template <typename T>
class TemplateBase
{
TemplateBase(std::map<std::string, T> aMap)
{ }
};
class SubClass : public TemplateBase<int>
{
SubClass(std::map<std::string, int> aMap) :
TemplateBase<int>(aMap) //No error.
{ }
};
Run Code Online (Sandbox Code Playgroud)
另外,以下函数也没有给出错误,因此它似乎与模板基类调用与const_iterator的组合有关:
void function()
{
std::map<std::string, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 java faker 创建一个对象user,并且变量不一致(如果我创建用户名,它可能是bob,用户名也可能是jhon.smith)
这是我创建假用户的代码:
public static User userRandom() {
User p = new User();
Faker faker = new Faker(new Locale("ES"));
int ramdomN = faker.number().numberBetween(0, 1);
char sex;
if (ramdomN == 0) {
sex = 'M';
} else {
sex = 'F';
}
faker.name().fullName();
p.setEmail(faker.name().username() + "@lucatinder.org");
p.setAge(faker.number().numberBetween(18, 90));
p.setGender(sex);
p.setName(faker.name().fullName());
p.setPassword(faker.lorem().characters(8, 16));
return p;
}
Run Code Online (Sandbox Code Playgroud)
我期望输出是:
email: Elisa@lucatinder.org,
Password: gki5ra4l2v,
name: Elisa Robledo Robledo,
age: 33,
Gender: F, (Female)
Run Code Online (Sandbox Code Playgroud)
但实际输出是:
Email: Elisa@lucatinder.org,
Password: …Run Code Online (Sandbox Code Playgroud) c++ ×3
ios ×3
objective-c ×3
c++11 ×2
iphone ×2
java ×2
class ×1
cocoa-touch ×1
faker ×1
inheritance ×1
inline ×1
jtable ×1
static ×1
swing ×1
templates ×1
threshold ×1
uiscrollview ×1
uitableview ×1
uitouch ×1
xcode ×1